#php #json
Вопрос:
Я пытаюсь получить все значения в массиве custom_fields в этом json
{
"event": "charge.success",
"data": {
"id": 1421960724,
"domain": "test",
"status": "success",
"reference": "A94M810260502831",
"amount": 250000,
"message": null,
"gateway_response": "Successful",
"paid_at": "2021-11-01T06:40:54.000Z",
"created_at": "2021-11-01T06:40:48.000Z",
"channel": "card",
"currency": "NGN",
"ip_address": "204.14.73.41",
"metadata": {
"custom_fields": [{
"display_name": "Full Name",
"variable_name": "full_name",
"value": "Kevil Udoh"
}, {
"display_name": "School Name",
"variable_name": "school_name",
"value": "Kelvin School"
}, {
"display_name": "Mobile Number",
"variable_name": "mobile_number",
"value": "7888384838"
}],
"referrer": "http://localhost/bibire/prep-class.php?msg1=register"
}
я попытался выполнить следующее, чтобы получить значения в объекте метаданных. Это работает, работает нормально, получая данные от этого объекта данных. Есть что-то, чего мне не хватает?
<?php
$obj = json_decode(myjsonabove);
$status = $obj->data->status; //this works fine
$ref = $obj->data->metadata->custom_fields->full_name; //this is not working
$amount = $obj->data->amount/100; //this works fine
?>
что на самом деле я понимаю неправильно.
пожалуйста, помогите. Большое спасибо
Комментарии:
1.
$obj->data->metadata->custom_fields
является массивом, поэтому используйте$obj->data->metadata->custom_fields[0]->variable_name
2. Подсказка: custom_fields-это массив …
3. Спасибо @Robert. это работает
Ответ №1:
$ref = $obj->data->metadata->custom_fields->full_name
— это не сработает, потому что у вас нет свойства с именем full_name, это значение. Кроме того, пользовательские поля представляют собой массив. Так что в качестве простого доступа к переменной вы бы сделали $ref = $obj->data->metadata->custom_fields[0]->variable_name
. Но на самом деле, потому что это массив объектов , которые вы, вероятно, захотите использовать array_filter()
или array_map()
, в зависимости от контекста.
Ответ №2:
Json недопустим, но если вы добавите две фигурные скобки в конце, это хорошо.
$ php input-full-name.php
Кевил Удох
$ cat input-full-name.php
<?php
$obj = json_decode(file_get_contents("input-full-name.json"));
foreach ($obj->data->metadata->custom_fields as $e) {
if ($e->variable_name == "full_name") {
print "{$e->value}n";
}
}
Профессиональный совет:
$ php -r 'print_r(json_decode(file_get_contents("input-full-name.json")));'
stdClass Object
(
[event] => charge.success
[data] => stdClass Object
(
[id] => 1421960724
[domain] => test
[status] => success
[reference] => A94M810260502831
[amount] => 250000
[message] =>
[gateway_response] => Successful
[paid_at] => 2021-11-01T06:40:54.000Z
[created_at] => 2021-11-01T06:40:48.000Z
[channel] => card
[currency] => NGN
[ip_address] => 204.14.73.41
[metadata] => stdClass Object
(
[custom_fields] => Array
(
[0] => stdClass Object
(
[display_name] => Full Name
[variable_name] => full_name
[value] => Kevil Udoh
)
[1] => stdClass Object
(
[display_name] => School Name
[variable_name] => school_name
[value] => Kelvin School
)
[2] => stdClass Object
(
[display_name] => Mobile Number
[variable_name] => mobile_number
[value] => 7888384838
)
)
[referrer] => http://localhost/bibire/prep-class.php?msg1=register
)
)
)