【问题标题】:PHP how to parse JSON data double bracket without key in foreach loopPHP如何在foreach循环中解析没有键的JSON数据双括号
【发布时间】:2021-12-20 04:30:28
【问题描述】:

这是一个 REST API 输出。我正在尝试访问 PHP 中 foreach 循环中的每个值,但没有键,而且双括号对我来说非常困难。

输出 JSON 数据:{ "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]]" }

【问题讨论】:

  • 你可以使用两个foreach循环 foreach($response->data as $value=>$key) { foreach($value as $item=> $key2) { } }
  • @JamesShisiah 举个例子,谢谢!
  • 使用json_decode($text, true) 将JSON 解析为数据结构,使用print_r() 或var_dump() 找出数据结构的样子,然后阅读PHP arrays 并学习如何操作它们。
  • @axiac 大声笑,你认为这太容易了,但你错了。如果您使用$array = json_decode($text, true),然后使用echo $array['data'];,则可以获得所有数字。如果是数组,则不能回显数组。
  • 嗯...你是对的。 $array['data'] 不是数组,而是包含序列化为 JSON 的二维数组的字符串。使用json_decode() 解析成数组。

标签: php json


【解决方案1】:

使用json_decode($text, true) 将JSON 解析为具有time 和data 属性的对象。
data 属性的值是一个字符串,它是二维数组的 JSON 表示形式。再次在其上使用json_decode() 以提取数字数组。然后使用foreach() 迭代这些值。

$text = '{ "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]]" }';

$parsed = json_decode($text, true);
$data = json_decode($parsed['data'], true);

foreach ($data as $row) {
    echo("| ");
    foreach ($row as $val) {
        echo("$val | ");
    }
    echo("\n");
}

输出:

| 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 | 

查看online。

【讨论】:

  • 完美,我正在寻找的答案。还有一个问题。如果 API 带有 3 个 data 键而不是一个 data,即 ``` "data1":" [[1630454700,0.01823.......... "data2":" [[1630454700 ,0.01823............, "data3":" [[1630454700,0.01823............```?我试过json_decode($parsed, true);作为第二个json_decode但我收到警告 ``` json_decode() 期望参数 1 是字符串,给定数组```
【解决方案2】:

您可以使用两个 foreach 循环,因为该响应在“data”属性上有两个数组,假设 JSON 响应设置为名为 的变量$响应:

foreach($response->data as $value => $key) { 
   
 foreach($value as $item => $key2) { 
    
    } 
    
  }

【讨论】:

  • 不,它不起作用。由于双括号,整个数字组被视为字符串而不是数组。
  • @Avel 在每个循环之前使用 json_decode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2014-01-26
  • 2015-10-19
  • 2014-05-28
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多