0

我有以下 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。

如何通过索引而不是名称访问第三个属性?

4

3 回答 3

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++;
}
于 2013-07-17T10:55:12.230 回答
1

更好的方法是检查 key 是否存在,因为结果的顺序可以改变

<?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 = '';
    }
}
于 2013-07-17T10:56:50.750 回答
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]];
于 2013-07-17T10:48:34.543 回答