2013-04-25 3 views
0

Я новичок в PHP и JSON, поэтому надеюсь, что кто-то может мне помочь.Разбор значений из JSON с использованием php

У меня есть 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), но я полностью потерян. Я ценю, что это, скорее всего, довольно простая задача, но я не знаю, где.

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

+0

Вы пробовали позвонить json_last_error() после вашего вызова json_decode, чтобы убедиться, что все правильно прочитано? – markle976

ответ

2

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

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

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

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

+0

Это сработало, спасибо! – SparkyUK2104

0

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

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

удачи

2

Вы можете быстро достигнуть этого в следующем порядке:

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

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

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

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