Я новичок в 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']
удачи