我有以下JSON响应示例(通常是长响应):
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"indent":"true",
"start":"0",
"q":"hi",
"wt":"json",
"rows":"2"}},
"response":{"numFound":69,"start":0,"docs":[
{
"id":335,
"Page":127,
"dartext":" John Said hi ! ",
"Part":1},
{
"id":17124,
"Page":127,
"Tartext":" Mark said hi ",
"Part":10}]
}}
我只想访问具有字符串类型的属性,问题是属性的名称不是常量所以我不能使用类似的东西:
$obj =json_decode(file_get_contents($data));
$count = $obj->response->numFound;
for($i=0; $i<count($obj->response->docs); $i++){
echo $obj->response->docs[$i]->dartext;
}
因为在另一个对象中它不是dartext它是Tartext。
如何通过它的索引访问第三个属性而不是它的名字?
答案 0 :(得分:1)
你可以尝试这个:
$my_key = array();
$obj =json_decode(file_get_contents($data));
$count = $obj->response->numFound;
$k =1;
foreach ($obj->response->docs as $k => $v) {
if ($k == 3) {
$my_key[$k] = $v; // Here you can put your key in
}
$k++;
}
答案 1 :(得分:1)
更好的方法是检查密钥是否存在,因为结果的顺序可以改变
<?php
$response = $obj->response;
foreach($response->docs as $doc) {
if (isset($doc->dartext)) {
$text = $doc->dartext;
} elseif (isset($doc->Tartext)) {
$text = $doc->Tartext;
} else {
$text = '';
}
}
答案 2 :(得分:0)
来自文档:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
如果您使用json_decode(file_get_contents($data), true)
,它将返回一个数组。
之后,您可以执行类似的操作,通过索引而不是键来访问数组。
$keys = array_keys($json);
echo $json[$keys[2]];