在php中通读动态JSON

时间:2016-08-29 19:17:45

标签: php

我需要知道如何通过PHP阅读JSON,我不知道密钥的用途。这是一个我需要经历的json的例子,但是key->值对中没有一个总是相同的。其中一些关键名称拼写不同或名称末尾有数字,所以我需要能够让它们动态化。

以下是我将循环使用的JSON的确切示例

[  
   {  
      "var5":"item-company-1",
      "asd2":"item-company-1",
      "tie1":"0",
      "cxs1":"481.891px",
      "xcve2":"130.563px"
   },...

我知道如果我知道密钥的确切名称,我会做类似的事情。

 $someObject = json_decode($someJSON);
  print_r($someObject);      // Dump all data of the Object
  echo $someObject[0]->name; // Access Object data

但是我不知道钥匙。我假设必须创建一个for循环来遍历每个对象,但我不知道如何在PHP中这样做。

2 个答案:

答案 0 :(得分:2)

我假设你的json总是以下格式

$json = '[  
   {  
      "var5":"item-company-1",
      "asd2":"item-company-1",
      "tie1":"0",
      "cxs1":"481.891px",
      "xcve2":"130.563px"
   },
   {  
      "var6":"item-company-2",
      "asd7":"item-company-2",
      "tie8":"0",
      "cxs9":"481.891px",
      "xcve10":"130.563px",
      "extra" : "unknown"
   }
]';

然后,您可以将整个JSON转换为数组并运行循环

$array = json_decode ($json ,true);

foreach ($array as $item) {
    foreach($item as $key => $value) {
        echo $value;
    }
}

答案 1 :(得分:0)

我标记了答案,因为他在技术上回答了我的问题。

我也发现这个解决方案,希望它可以帮助将来作为上述的一个很好的替代品。这实际上将通过一个多级数组来获取所有值。

$jsonIterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator(json_decode($json, TRUE)),
    RecursiveIteratorIterator::SELF_FIRST);

foreach ($jsonIterator as $key => $val) {
    if(is_array($val)) {
        echo "$key:\n";
    } else {
        echo "$key => $val\n";
    }
}