使用PHP,随机对象名访问JSON对象

时间:2013-12-04 19:39:01

标签: php json

我正在尝试解析JSON代码中的某些内容,但问题是我需要的两组数据中包含随机名称,这里是来自var_dump:

array (size=2)
'results' => 
array (size=1)
  0 => string 'Phone.5d5b6fef-a2e0-4b08-cfe3-bc7128b776c3.Durable' (length=50)
'dictionary' => 
array (size=3)
  'Person.51f28c76-2993-42d3-8d65-4ea0a66c5e16.Ephemeral' => 
    array (size=8)
      'id' => 
        array (size=5)
          ...
      'type' => null
      'names' => 
        array (size=1)
          ...
      'age_range' => null
      'locations' => null
      'phones' => 
        array (size=1)
          ...
      'best_name' => string 'John Smith' (length=15)
      'best_location' => null
  'Location.28dc9041-a0ee-4613-a3b0-65839aa461da.Durable' => 
    array (size=30)
      'id' => 
        array (size=5)
          ...
      'type' => string 'ZipPlus4' (length=8)
      'valid_for' => null
      'legal_entities_at' => null
      'city' => string 'City' (length=8)
      'postal_code' => string '12345' (length=5)
      'zip4' => string '4812' (length=4)
      'state_code' => string 'MO' (length=2)
      'country_code' => string 'US' (length=2)
      'address' => string 'Main St, City, MO 12345-4812' (length=33)
      'house' => null

不,我试图从以Person开头的部分和位置下的best_name下获取address。但是当我这样做时:

$string = file_get_contents($url);
$json=json_decode($string,true);
var_dump($json);
echo $json['dictionary']['Person']['best_name'];

我收到Undefined index: Person错误,因为Person的实际对象名是: Person.51f28c76-2993-42d3-8d65-4ea0a66c5e16.Ephemeral每次进行搜索时都会有所不同。有没有办法在不将随机生成的行放入?

的情况下执行此操作

希望这是有道理的,感谢提前的帮助!

2 个答案:

答案 0 :(得分:1)

如果Person键始终以字符串“Person”开头,那么只需执行foreach并检查包含该字符串的键。

像:

foreach ($json['dictionary'] as $key => $value) {
  if (preg_match('/^Person/', $key)) {
    echo $json['dictionary'][$key]['best_name'];
  }
}

当然,如果您有多个以“Person”开头的键,这会变得复杂。

您可以使用“位置”或您需要的任何其他字符串执行相同操作。

答案 1 :(得分:1)

这样的事情......循环遍历$json['dictionary']的索引键,找到以“Person”开头的东西。

$foundIt = false;
foreach (array_keys($json['dictionary']) as $key) {
    if (substr($key,0,6) == 'Person') {
         $foundIt = $key;
         break;
    }
}
if ($foundIt) { echo $json['dictionary'][$foundIt]['best_name']; }