PHP make json_encode НЕ избегает двойных кавычек

Я использую laravel и хочу засеять json в своей базе данных. Итак, я делаю json_encode ($ array). Но это помещает "\" на каждый "(двойная кавычка), чего я не хочу, как я могу сгенерировать json из массива, не вставляя косую черту перед каждой двойной кавычкой?

Это массив:

$fields = [
            [
                'name' => 'image',
                'type' => 'file',
                'view' => 'image',
                'validations' => 'required|image',
                'label' => 'image'
            ]
        ];

Когда я использую json_encode($fields), он сохраняет его в базе данных, например:

"[{\"name\":\"image\",\"type\":\"file\",\"view\":\"image\",\"validations\":\"required|image\",\"label\":\"image\"}]"

Мне не нужны эти косые черты, потому что из-за них мне приходится использовать json_decode() дважды. Также этот атрибут $casts в Laravel декодирует их только один раз.

ИСПРАВИТЬ Это то, что я пробовал, и это сработало

У меня в модели есть:

/**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'fields' => 'array',
        'translatable_fields' => 'array'
    ];

Значит, он должен декодировать его автоматически. Вот как я сохранял его в базе из сеялки:

$moduleTemplate = new ModuleTemplate;
        $moduleTemplate->translateOrNew('en')->name = 'Image with text';
        $moduleTemplate->translateOrNew('bg')->name = 'Снимка с тескт';
        $moduleTemplate->view = 'section-1';

        $fields = collect([
            [
                'name' => 'image',
                'type' => 'file',
                'view' => 'image',
                'validations' => 'required|image',
                'label' => 'image'
            ]
        ]);

        $moduleTemplate->fields = $fields->toJson();

        $translatableFields = collect([
            [
                'name' => 'title',
                'type' => 'text',
                'view' => 'input',
                'validations' => 'required|string|max:190',
                'label' => 'title'
            ],
            [
                'name' => 'text',
                'type' => 'wysiwyg',
                'view' => 'wysiwyg',
                'validations' => 'required|string',
                'label' => 'text'
            ]   
        ]);

        $moduleTemplate->translatable_fields = $translatableFields->toJson();
        $moduleTemplate->save();

И он каждый раз наносил косые черты Чтобы исправить это, я просто удалил ->toJson() из массивов, и это сработало.

Без \ ваш json не будет декодирован.

u_mulder 12.12.2018 15:32

На самом деле это проблема, когда я пытаюсь декодировать его С помощью косой черты, он возвращает ошибку, но когда он без `` все в порядке. Вот почему я пытаюсь этого избежать

Angel Miladinov 12.12.2018 15:34

Не могли бы вы привести пример того, что вы получаете?

Nigel Ren 12.12.2018 15:36
$fields = [ [ 'name' => 'image', 'type' => 'file', 'view' => 'image', 'validations' => 'required|image', 'label' => 'image' ] ];, затем json_encode($fields) возвращает "[{\"name\":\"image\",\"type\":\"file\",\"view\":\"image\",\‌​"validations\":\"req‌​uired|image\",\"labe‌​l\":\"image\"}]"
Angel Miladinov 12.12.2018 15:38
«Когда я использую json_encode ($ fields), он возвращает […]» - это не так:3v4l.org/G8qmE Вы, должно быть, где-то после этого как-то неправильно обрабатываете свои данные.
misorude 12.12.2018 15:50

Извините, возможно, это делает laravel, когда я пытаюсь сохранить его в базе данных. Могу ли я изменить название вопроса сейчас?

Angel Miladinov 12.12.2018 15:51

Вы не учли, что сохраняете строку в БД. Большинство ORM будут экранировать строку, то есть json, с помощью косой черты.

nerdlyist 12.12.2018 15:53

@nerdlyist Мой вопрос начинается с того, что я пытаюсь сохранить его в базе данных с помощью laravel

Angel Miladinov 12.12.2018 15:55

Извините за оплошность. Вы делаете. Однако ORM и механизмы PHP SQL в основном escape-строки предназначены для обеспечения безопасности. Однако, когда вы извлекаете это из БД, оно не должно быть экранировано. Можете ли вы предоставить код для записи и чтения в вашу БД?

nerdlyist 12.12.2018 15:58

Объявление $casts также кажется странным, учитывая, что как только вы ->toJson оба поля, они станут строками, а не массивами.

mario 12.12.2018 16:13

Собственно я исправил, вы можете посмотреть раздел FIX в моем вопросе :)

Angel Miladinov 12.12.2018 16:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
11
4 693
1

Ответы 1

Просто измените формат котировок с

json_encode('"glossary": {"title": "example glossary"}');

к

json_encode("'glossary': {'title': 'example glossary'}");

Редактировать на основе ваших комментариев

С участием

$fields = [ [ "name" => "image", 'type' => 'file', 'view' => 'image', 'validations' => 'required|image', 'label' => 'image' ] ];

Когда я делаю

json_encode($fields)

Это возвращает меня

[{"name":"image","type":"file","view":"image","validations":"required|image","label":"image"}]

Использование Laravel 4.2, не тестировалось с Laravel> 5

Возможно, вы делаете что-то не так с вашими данными JSON

Проголосовали на основе редактирования. Я получаю правильные результаты, используя чистый PHP (без laravel и т. д.) На нескольких машинах (debian stable, oldstable, ubuntu 16.04, ubuntu 18.04).

ivanivan 12.12.2018 15:58

Другие вопросы по теме