Я использую 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() из массивов, и это сработало.
На самом деле это проблема, когда я пытаюсь декодировать его С помощью косой черты, он возвращает ошибку, но когда он без `` все в порядке. Вот почему я пытаюсь этого избежать
Не могли бы вы привести пример того, что вы получаете?
$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, когда я пытаюсь сохранить его в базе данных. Могу ли я изменить название вопроса сейчас?
Вы не учли, что сохраняете строку в БД. Большинство ORM будут экранировать строку, то есть json, с помощью косой черты.
@nerdlyist Мой вопрос начинается с того, что я пытаюсь сохранить его в базе данных с помощью laravel
Извините за оплошность. Вы делаете. Однако ORM и механизмы PHP SQL в основном escape-строки предназначены для обеспечения безопасности. Однако, когда вы извлекаете это из БД, оно не должно быть экранировано. Можете ли вы предоставить код для записи и чтения в вашу БД?
Объявление $casts также кажется странным, учитывая, что как только вы ->toJson оба поля, они станут строками, а не массивами.
Собственно я исправил, вы можете посмотреть раздел FIX в моем вопросе :)






Просто измените формат котировок с
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).
Без
\ваш json не будет декодирован.