Как преобразовать объект PHP в формат JSON для OpenAPI 3 - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время я работаю над проектом API для PHP, используя OpenAPI 3.0.2.Проблема в том, что у меня есть вложенный массив php, в соответствии с которым я хочу описать схему OpenAPI и отправить эти данные в виде JSON в теле запроса POST для тестирования.

Вот данные PHP, которые я хочу преобразовать в JSON:

    [[
        'question'    => 'Do you have an active mobile money account?'
        'answers'     => [
            [
                'label'  => 'A.',
                'text'   => 'Yes',
                'custom' => false,
                'value'  => 'yes',
            ],
            [
                'label'  => 'B.',
                'text'   => 'No',
                'custom' => false,
                'value'  => 'no',
            ]
        ],
    ],...]

А вот JSON, который я уже пытался создать,но он не соответствует объекту данных (проверка сервера не удалась)

openapi.json

"example":{
    "survey": [
                {
                  "question": "mobile money account",
                  "answers": [
                    [[{"label":"A."},{"text": "Yes"},{"custom": false},{"value":"yes"}]]
                  ]
                },
     ...
}

ПРИМЕЧАНИЕ! проверка не удалась только для свойства "answers"!

РЕДАКТИРОВАНИЕ: с использованием json_decode($arr,true) дает мне следующее:

"answers": [
                {
                  "label": "A.",
                  "text": "Yes",
                  "custom": false,
                  "value": "yes"
                },
                {
                  "label": "B.",
                  "text": "No",
                  "custom": false,
                  "value": "no"
                }
              ]

Но сервер по-прежнему отвечает с ошибкой, что«ответы» недействительны

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Показать ваши полные данные массива php.Если это так -

$d =  [[
    'question'    => 'Do you have an active mobile money account?',
    'answers'     => [
        [
            'label'  => 'A.',
            'text'   => 'Yes',
            'custom' => false,
            'value'  => 'yes',
        ],
        [
            'label'  => 'B.',
            'text'   => 'No',
            'custom' => false,
            'value'  => 'no',
        ]
    ],
],

];

Тогда вам нужно использовать json_encode ($ d, true);

0 голосов
/ 08 февраля 2019

То, что вы показываете нам как «вывод json_encode», не является реальным выводом json_encode.Он никогда не покажет вам ассоциативный массив, поскольку он не существует в JSON.Это никогда не даст вам что-то вроде [ 'label' => 'A.',.

Я отправил ответы на json_encode, и вот что я получил:

"'answers" => [['label '=>' A. ',' text '=>' Менее 500 UGX ',' custom '=> false,' value '=>' <500 UGX ',]] "</p>

Это неправильно .Это не вывод json_encode.См. Мой код ниже.

Я думаю, что проблема в размерах answers.Ваш массив кажется слишком глубоким:

"answers": [ [[

Обратите внимание на 3 скобки открывающегося массива?


$x = [[
        'question'    => 'Do you have an active mobile money account?',
        'answers'     => [
            [
                'label'  => 'A.',
                'text'   => 'Yes',
                'custom' => false,
                'value'  => 'yes',
            ],
            [
                'label'  => 'B.',
                'text'   => 'No',
                'custom' => false,
                'value'  => 'no',
            ]
        ]
]];

echo json_encode($x, JSON_PRETTY_PRINT);

// Output:

[
    {
        "question": "Do you have an active mobile money account?",
        "answers": [
            {
                "label": "A.",
                "text": "Yes",
                "custom": false,
                "value": "yes"
            },
            {
                "label": "B.",
                "text": "No",
                "custom": false,
                "value": "no"
            }
        ]
    }
]
0 голосов
/ 08 февраля 2019

Каждый объект в JSON соответствует отдельному ассоциативному массиву (или объекту PHP, но мы поговорим здесь о массивах).

Итак, чтобы получить значение такого атрибута JSON "answer":

[
     [[{"label":"A."},{"text": "Yes"},{"custom": false},{"value":"yes"}]]
]

Нам нужен «массив массивов массивов ассоциативных массивов».

Так в PHP это должно быть:

 [[[
    ["label" => "A."],
    ["text" => "Yes"],
    ["custom" => false],
    ["value" => "yes"]
]]]

Примечание Длямне кажется, слишком много вложений в ожидаемую структуру, но что угодно - это то, что вы сказали, что хотите.

...