Мне недавно пришлось устранять ошибку в устаревшем PHP-приложении.Это приложение получает запрос от другого приложения с JSON в форме:
{
"someList": [
"item A",
"item B"
],
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
}
}
Когда это десериализуется в нативный PHP "ассоциативный массив", как список, так и карту (с ключами 0, 1, 2и 3) выглядят как списки.Хорошо, я могу обойти это.Однако это приложение выполняет вычисления с этими данными и добавляет к ним еще некоторые данные перед сериализацией обратно в JSON примерно в том же формате и отправляет их в другое приложение.Вот где проблема.json_encode($data)
{
"someList": [
"item A",
"item B"
],
"ratings": [
0.001234,
0.0666,
0.09876,
0.777777
]
}
Все ключи ушли ...
Я вижу, что могу использовать JSON_FORCE_OBJECT
a la echo json_encode($data, JSON_FORCE_OBJECT)
.но потом я получаю:
{
"someList": {
"0": "item A",
"1": "item B"
},
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
}
}
Теперь у меня есть ключи в первом списке, которые я не хочу. Есть ли способ сериализации этого JSON, так что someList
будет списком (без ключей), а ratings
будет картой / объектом (с ключами 0, 1, 2 и 3)?