Я новичок в PHP и пытаюсь преобразовать массив в json без индексов.
Например, у меня есть:
[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]
Мне нужно, чтобы это был один объект json:
{
"name":"Dean,
"last_name":"Don",
"age":31,
"height":181
}
Я попытался использовать json_encode(), но все, что я получил, неверно, я попытался указать
JSON_FORCE_OBJECT, который ставит индексы, которые мне не нужны.
У кого-нибудь есть идеи, как это решить? Спасибо
Конечно, было бы лучшая идея, чтобы посмотреть, как вам удалось создать первую строку JSON и исправить это, вместо того, чтобы пытаться возиться с плохим результатом
Записываемый вами массив не является допустимым массивом php.
@ T30 Я думаю, что это строковое представление массива объектов в формате JSON.
Решением может быть выполнение json_decode и цикл результатов для создания нового массива.






ты пробовал
json_encode(array_values($array))?
Не могли бы вы объяснить, как это поможет в создании единого объекта JSON?
подробнее см. здесь: stackoverflow.com/questions/11195692/…
Не знаю, какое отношение эта ссылка имеет к этому вопросу.
Вы можете использовать json_decode для преобразования json в массив. Используйте array_reduce, чтобы создать новый массив. Используйте json_encode, чтобы снова преобразовать массив в json
$str = '[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]';
//Convert the json into array
$arr = json_decode($str, true);
//Make the multi dementional array into an associative array
$arr = array_reduce($arr, function($c, $v){
foreach ($v as $key => $val) $c[$key] = $val;
return $c;
}, array());
//Convert the array to json
$result = json_encode($arr);
echo $result;
Это приведет к:
{"name":"Dean","last_name":"Don","age":31,"height":181}
Все же было бы лучше исправить первоначальные ошибки создания, поскольку исходная строка JSON действительно бесполезна ни для человека, ни для зверя.
Первый бит JSON выглядит как результат кодирования массива пар ключ-значение следующим образом:
$data = [
['name' => 'Dean'],
['last_name' => 'Don'],
['age' => 31],
['height' => 181]
];
Если это то, с чего вы начинаете, вы можете перебрать набор атрибутов и создать сущность, которая будет кодировать один объект.
foreach ($data as $attribute) {
$entity[key($attribute)] = reset($attribute);
}
echo json_encode($entity);
Как упоминалось в комментариях, может быть - лучший способ сделать это раньше в вашем коде, поэтому вы можете создать объект, который вы хотите в первую очередь, вместо чего-то вроде примера $data, который вам придется повторно обработать, прежде чем вы сможете выведите его.
Другой способ - декодировать, объединить и перекодировать:
$json = '[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]';
$data = json_decode($json,true); // decode
$data = array_merge(...$data); // merge
echo json_encode($data, JSON_PRETTY_PRINT); // recode
Выход:
{
"name": "Dean",
"last_name": "Don",
"age": 31,
"height": 181
}
Я согласен, что array_merge идеально подходит для этого.
Покажите нам, что вы пробовали, возможно, вы ближе к ответу, чем думаете