Как преобразовать объект PHP в формат JSON для OpenAPI 3

В настоящее время я работаю над проектом 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"}
]

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

-1

Решение

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

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

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

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

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

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

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

1

Другие решения

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

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

«‘answers’ => [
[
‘label’ => ‘A.’,
‘text’ => ‘Менее 500 UGX’,
‘custom’ => false,
‘value’ => ‘< 500 UGX ‘,
]] «

Это неправильно. Это не вывод 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

Покажите ваши полные данные массива 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);

-1
По вопросам рекламы [email protected]