Разбор значений из JSON с использованием php

Я новичок в PHP и JSON, поэтому надеюсь, что кто-то сможет мне помочь.

У меня есть PHP, который сторонняя сторона выполняет POST против, предоставляя данные JSON. Примером отправленных данных будет:

> { "created": 1326853478, "livemode": false, "id": > "evt_00000000000000", "type": "charge.succeeded", "object": > "event", "data": { > "object": { > "id": "ch_00000000000000", > "object": "charge", > "created": 1366838716, > "livemode": false, > "paid": true, > "amount": 1000, > "currency": "gbp", > "refunded": false, > "fee": 59, > "fee_details": [ > { > "amount": 59, > "currency": "usd", > "type": "stripe_fee", > "description": "Stripe processing fees", > "application": null, > "amount_refunded": 0 > } > ], > "card": { > "object": "card", > "last4": "4242", > "type": "Visa", > "exp_month": 2, > "exp_year": 2016, > "fingerprint": "cniJDyeew54ashW6Iyr", > "country": "US", > "name": "wibble3", > "address_line1": null, > "address_line2": null, > "address_city": null, > "address_state": null, > "address_zip": null, > "address_country": null, > "cvc_check": "pass", > "address_line1_check": null, > "address_zip_check": null > }, > "captured": true, > "failure_message": null, > "amount_refunded": 0, > "customer": null, > "invoice": null, > "description": null, > "dispute": null > } } } 

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

Используя этот код, я могу извлечь «тип» достаточно легко:

 $body = @file_get_contents('php://input'); $event_json = json_decode($body); print $event_json->{'type'}; 

Но я не могу извлечь «плату», например, которая, кажется, ниже уровня, где я успешно извлекаю значение из или «описание», которое снова является еще одним уровнем.

Я хотел бы иметь возможность извлекать только определенные элементы из этой строки JSON (например, Type, Fee, Description, Last4), но я полностью потерян. Я ценю, что это, скорее всего, довольно простая задача, но я не знаю, где.

Любая помощь, с благодарностью полученная!

Во-первых, я бы предложил передать true как второй аргумент json_decode . Это приводит к ассоциативному массиву, а не к объекту, что упрощает работу с ним.

Затем вы можете сделать это:

 $fee = $event_json['data']['object']['fee']; 

Вы можете связать эти квадратные скобки столько раз, сколько необходимо, чтобы углубиться в массив.

Вы можете быстро добиться этого следующим образом:

 $body = @file_get_contents('php://input'); $event_json = json_decode($body, true); print $event_json['data']['object']['fee']; 

у вас есть несколько уровней объектов, поэтому используйте:

 echo($event_json->data->object->fee); 

В основном вы получаете эхо fee , которое является членом объекта имени object , который, в свою очередь, является атрибутом объекта с именем data , который снова в свою очередь является членом вашего объекта $event_json .

Когда вы делаете json_decode, вы получаете массив этих данных. Таким образом, вы можете получить доступ к следующим данным:

 $event_json['data']['object']['fee'] 

удачи