В настоящее время я работаю над проектом 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"}
]
Но сервер по-прежнему отвечает с ошибкой, что «ответы» являются недействительными
Каждый объект в JSON соответствует отдельному ассоциативному массиву (или объекту PHP, но здесь мы поговорим о массивах).
Таким образом, чтобы получить такой JSON "answer"
значение атрибута:
[
[[{"label":"A."},{"text": "Yes"},{"custom": false},{"value":"yes"}]]
]
Нам нужен «массив массивов массивов ассоциативных массивов».
Так что в PHP это должно быть:
[[[
["label" => "A."],
["text" => "Yes"],
["custom" => false],
["value" => "yes"]
]]]
Заметка
Для меня это выглядит как слишком много вложений в ожидаемую структуру, но что угодно — это то, что вы сказали, что хотите.
То, что вы показываете нам как «вывод 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"}
]
}
]
Покажите ваши полные данные массива 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);