2013-04-03 6 views
2

Вот мой JSON код:Как получить значения из вложенных данных JSON?

{ 
    "query": { 
     "count": 2, 
     "created": "2013-04-03T09:47:03Z", 
     "lang": "en-US", 
     "results": { 
      "yctCategories": { 
       "yctCategory": { 
        "score": "0.504762", 
        "content": "Computing" 
       } 
      }, 
      "entities": { 
       "entity": [ 
        { 
         "score": "0.902", 
         "text": { 
          "end": "19", 
          "endchar": "19", 
          "start": "0", 
          "startchar": "0", 
          "content": "Computer programming" 
         }, 
         "wiki_url": "http://en.wikipedia.com/wiki/Computer_programming" 
        }, 
        { 
         "score": "0.575", 
         "text": { 
          "end": "51", 
          "endchar": "51", 
          "start": "41", 
          "startchar": "41", 
          "content": "programming" 
         } 
        } 
       ] 
      } 
     } 
    } 
} 

и ниже мой PHP код

$json_o = json_decode($json,true); 
echo "Json result:</br>"; 
echo $json; // json 
echo "</br></br>"; 
echo "Value result:</br>"; 
$result = array(); 
//$entity = $json_o['query']['results']['entities']['entity']; 
foreach ($json_o['query']['results']['entities']['entity'] as $theentity) 
foreach ($theentity['text'] as $thetext){ 
    $result[] = $thetext['content']; 
} 
print_r($result); 

Я ожидаю, чтобы получить значение содержания в сущности, которая является «Компьютерное программирование» и "программирование ".

Я уже искал, но все еще нашел решение.

В результате моего PHP код:

Array ([0] => 1 [1] => 1 [2] => 0 [3] => 0 [4] => C [5] => 5 [6] => 5 [7] => 4 [8] => 4 [9] => p) 

ответ

0

Измените свой рабочий в:

$result = array(); 
foreach ($json_o['query']['results']['entities']['entity'] as $theentity) { 
    $result[] = $theentity['text']['content']; 
} 
print_r($result); 

$theentity['text'] - это массив ключей => значение. Вы можете просто нажать клавишу content вместо того, чтобы перебирать все записи.

Другим способом вы могли бы сделать это (хотя это плохой выбор) является:

foreach($theentity['text'] as $key => $value) { 
    if('content' === $key) { 
     $result[] = $value; 
    } 
} 

Я обеспечиваю этот второй пример, чтобы продемонстрировать, почему исходный код не работает.

Update

Для доступа на другие свойства, такие как в yctCategories просто сделать что-то подобное

$categories = array(); 
foreach ($json_o['query']['results']['yctCategories'] as $yctCategory) { 
    $categories[] = $yctCategory['content']; 
} 
print_r($categories); 
0

удалить вторую Еогеасп и заменить его $result[] = $theentity['text']['content'];

, используя что-то вроде http://jsonlint.com/ может сделать его проще для вас, чтобы увидеть, как структурирована JSON. или только var_dump (или print_r) вывод вашего json_decode.

+0

ТНХ, я также использовать ** jsonlint.com ** сломать структуру –

1

Используйте этот цикл

foreach ($json_o['query']['results']['entities']['entity'] as $theentity) 
{ 
    $result[] = $theentity['text']['content']; 
} 

http://codepad.viper-7.com/tFxh1w

Выход Array ([0] => Компьютерное программирование [1] => программирование)

0

Используйте простой код:

$array = $json_o['query']['results']['entities']['entity']; 

foreach($array as $v){ 
    echo $v['text']['content']; 
} 
+0

дублирующих данных без необходимости, нет причин быть неэффективными здесь. –

+0

@RickBurgess в порядке, но обеспечивает большую читаемость :) и производительность при редактировании – 2013-04-03 11:17:33

+0

@Akam thx для уточнения .. это дало мне еще один вариант при написании кода –

Смежные вопросы