2012-02-04 3 views
4

Вот JSON, который асинхронно отправляется на мою страницу php. Это, по сути, список продуктов, который будет вставлен в мою базу данных mySQL.Как обрабатывать JSON в PHP?

Моя проблема заключается в расшифровке JSON в PHP. Я могу сделать это в js с функцией eval, но в PHP мои усилия привели к сложной серии функций разложения и развязки.

{ 
    "Product": [ 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     }, 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     }, 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     } 
    ] 
} 

Я знаю, PHP имеет встроенную функцию json_decode, но в документации PHP они только показывают, как обрабатывать массив.

Любой совет или помощь будет очень ценна

Taylor

+0

Вы можете сделать это: [ '$ json_decoded -> { 'Product'} [0] -> { 'PRODUCT_TITLE'};'] (http://codepad.org/g5Ogru5Z) –

+0

@JaredFarrish: '$ json_decoded -> {'Product'}' не эквивалентен '$ json_decoded-> Product'? edit: yes http://codepad.org/fGzAZk7v, хотя я по-прежнему предпочитаю ассоциативные массивы – mpen

+0

@Mark - Это было всего лишь реликтом предыдущей попытки. –

ответ

10

Если вы звоните json_decode($data,true);, ваши данные будут:

Array(
    "Product"=>Array(
     Array(
      "Product_Title"=>"Cloth", 
      "Product_Description"=>"Here is cloth", 
      "Price"=>"100", 
      "Category_ID"=>"1" 
     ), 
     Array(
............. 
     ) 
    ) 
); 

Что не так с этим?

+0

Это, кажется, работает лучше всего для меня спасибо – TaylorMac

5

Если вы хотите сохранить объекты stdClass, вам нужно использовать синтаксис объекта-свойства.

<?php 

$json = '{ 
    "Product": [ 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     }, 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     }, 
     { 
      "Product_Title": "Cloth", 
      "Product_Description": "Here is cloth", 
      "Price": "100", 
      "Category_ID": "1" 
     } 
    ] 
} 
'; 

$json_decoded = json_decode($json); 

// Note, it's usually a bad idea to use use count() like this; 
// cache the count before the for() in a variable and use that. 
// This is for demo purposes only. :) 
for ($i = 0; $i < count($json_decoded->{'Product'}); $i++) { 
    echo "Products: 
" . $json_decoded->{'Product'}[$i]->{'Product_Title'} . " 
" . $json_decoded->{'Product'}[$i]->{'Product_Description'} . " 
" . $json_decoded->{'Product'}[$i]->{'Price'} . " 
" . $json_decoded->{'Product'}[$i]->{'Category_ID'} . " 

"; 
} 

?> 

Выходы:

Products: 
Cloth 
Here is cloth 
100 
1 

Products: 
Cloth 
Here is cloth 
100 
1 

Products: 
Cloth 
Here is cloth 
100 
1 

http://codepad.org/JxYAO5De

+0

Lol, могу ли я просто указать на иронию в говоря: '// Заметьте, обычно использовать плохую идею use count() как это ...', когда на самом деле делать это правильно, было бы проще. Я нахожу, что делаю это много в редактировании, потому что люди тупо спускаются на основе ярлыков, сделанных для простоты, краткости или демонстрационных целей. – chacham15

+0

Или ... это возможность показать, как это не делать * обычно * и взять на себя инициативу, чтобы * сказать * не делайте этого таким образом. Есть люди, которые видят * лучший способ (обычно) и все еще возвращаются к * легкому пути. –

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