You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何在foreach循环中解析无键双括号格式的JSON数据

解决方法

核心原因是API返回的data字段为字符串格式的嵌套数组,需要两次JSON解码即可正常遍历:

实现步骤

  • 第一次解码完整的API响应内容,拿到外层的time和data字段
  • 第二次单独对data字段的字符串内容做JSON解码,得到二维索引数组
  • 直接通过foreach遍历二维数组,用数字下标访问对应值即可

代码示例

// 存储API返回的原始字符串
$apiRaw = '{ "time":20211101, "data":" [[1630454700,0.01823,0.01823,0.01823,0.01823,5366.009589], [1630461840,0.01876,0.01877,0.01876,0.01877,5713.905167], [1630462080,0.01877,0.01877,0.01877,0.01877,1039.957378], [1630477560,0.01777,0.01776,0.01778,0.01779,1000.000000]]" }';

// 第一次解码外层JSON,第二个参数传true返回关联数组
$outerArr = json_decode($apiRaw, true);

// 第二次解码data字段的字符串内容,得到目标二维数组
$targetData = json_decode($outerArr['data'], true);

// 遍历访问数据,子数组下标0-5分别对应:时间戳、开盘价、最高价、最低价、收盘价、交易量
foreach ($targetData as $klineItem) {
    $time = date('Y-m-d H:i:s', $klineItem[0]);
    $closePrice = $klineItem[4];
    // 此处编写业务逻辑
}

可选优化:给字段绑定键名

如果不想用数字下标访问,可以手动映射字段名:

// 按顺序定义字段名
$fieldMap = ['timestamp', 'open', 'high', 'low', 'close', 'volume'];
foreach ($targetData as $klineItem) {
    $item = array_combine($fieldMap, $klineItem);
    // 之后可直接用 $item['close'] 方式访问对应值
}

内容的提问来源于stack exchange,提问作者Avel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:24:04