возвращаю return response()->json($data); то в поле json появляются лишние слэши.
Можно как-то извлечь данные как обычный массив? Или надо самому вручную делать json_decode для всех записей?
дай контекста, из твоего сообщения нифига не понятно
да, почитай доку по функциям json_encode, json_decode.
В таблице есть поле типа json. Мне нужно в апи отдать данные из этой таблицы. Когда возвращаю данные, то появляются дополнительные слэши вот такие: attributes: "{\"url\": null, \"name\": \"Test1387\"}" Потому что в одном из полей уже строка json. И выходит, что надо самому их декодировать, перед там как опять закодировать в json. А данные в таблице много, и это будет медленно. Я хотел узнать есть ли способ взять с mysql данные как обычный массив, а не json. Надеюсь понятно описал) Подскажите как
"Надеюсь понятно описал)" нет, вообще ни разу. Вот что тебе нужно сделать: Описать стек в котором происходит действо, дать примеры кода (лучше найти онлайн песочницу и скопипастить туда), написать какой результат в каком месте ты получаешь, сказать что ты хотел бы получить, привести пример, тогда это станет понятным, а сейчас я вообще не понимаю, что у тебя происходит.
Судя по тому что у тебя экранируются спец символы, что-то фильтрует вывод, но я в душе не чаю что.
Беру данные из бд: $data = DB::table('table')->get(); Вывожу на экран: return response()->json($data); Ожидаю получить : {"attributes":{"name":"Test777","url":null}} Получаю: {"attributes":"{\"url\": null, \"name\": \"Test777\"}"} Поле attributes в mysql имеет тип json. Как извлечь из него данные так, чтобы не появлялись лишние слэши?
хм, на сколько я понял, дело происходит в контексте ларавел, вот что происходит: 1) Получаем JSON из бд 2) Конвертим JSON в JSON 3) Отдаем Задача - избежать второго пункта. гугли как указать в заголовке, что responce - это json type, и просто возвращай значение: return responce($data);
Попробуй вот это return response($data)->header('Content-Type', 'application/json');
да, ларавел. Дело в том что остальные поля в бд тоже нужно вывести, они же не в json Я могу конечно взять json_decode($data->attributes); , но данных много и не хочу при каждом запросе кодировать каждую запись отдельно Вот и пытаюсь разобраться как работает в mysql поле json, чтобы получить данные как обычный массив. Может посоветуете что можно предпринять, если схема данных заранее неизвестна, а база лежит в mysql? Я думал json решит проблему
https://laravel.com/docs/8.x/eloquent-mutators#array-and-json-casting
Ну если уж на столько упороться по оптимизации, то хранить в json то что не изменяется, а остальное все таки придется закодировать, а потом руками соединить конкатенацией в нужно месте, т.е. руками менеджить строку с jsonом, но это очень странное решение
Обсуждают сегодня