我正在尝试在JSON文件中搜索值并从同一对象返回不同的值。
JSON看起来像这样:
{ {2}}我想通过按名称搜索来检索“apiKey”值。我知道这可以使用{
"source": {
"name": "source1",
"url": "https://someurl",
"apiKey": "someapi"
},
"targets" : [
{
"name" : "target1",
"url": "https://target1url",
"apiKey": "target1api"
},
{
"name" : "target2",
"url": "https://target2url",
"apiKey": "target2api"
}
]
}
和foreach()
语句完成,但我无法获得该值。我的PHP代码是这样的:
if
将“名称”与其他属性放在同一级别是不好的做法?例如,“name”应该是父名称而其他值是否为其子项?或者,如果JSON没问题,你能帮助我理解为什么上述不起作用吗?
答案 0 :(得分:1)
您的数据结构没有任何问题。
您的代码无效的原因是您已使用TRUE
将结构转换为数组作为json_decode($json, true);
的第二个参数,但您仍然将结果数据结构作为对象进行寻址。只需删除TRUE
参数,生成的PHP数据将保留为对象,如此
$f = file_get_contents('tst.json');
$json = json_decode($f);
//print_r($json);
foreach ($json->targets as $obj){
if ( $obj->name == 'target1') {
echo $obj->apiKey;
}
}
答案 1 :(得分:1)
它是非对象,它的数组。重写你的循环。
ID<-c("A","A","B","B","C","C","D","D")
CW<-c(1,2,1,2,1,2,1,2)
Value<-c(1,1,3,3,NA,NA,6,6)
dt<-cbind(ID,CW,Value)