2013-07-17 3 views
0

У меня есть следующий JSON пример ответа (обычно длинный ответ):Как получить доступ к 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

Очень важно, чтобы вы сначала выяснить, где ключ находится. Даже если он существует (используя приведенные ниже ответы, вы можете понять это) - нет гарантии, что ключи объектов всегда будут в одном порядке ... См. [This] (http://stackoverflow.com/a/5525820/ 3249501) отличный ответ – GrayedFox

ответ

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 = ''; 
    } 
} 
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]]; 
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++; 
} 
Смежные вопросы