Как мне получить полное имя из этого ответа json с помощью php

#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
                )

        )

)