我正在尝试解析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
每次进行搜索时都会有所不同。有没有办法在不将随机生成的行放入?
希望这是有道理的,感谢提前的帮助!
答案 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']; }