SQL Вставить JSON в столбец таблицы

при поиске способа вставки массива в отдельные столбцы БД я нашел статью о вставке строки JSON. Однако не объяснили, как. Я пытался искать и найти путь без успеха.

У меня есть следующая таблица:

+---------+----------------+----+
|  Name   |      Type      |    |
+---------+----------------+----+
| id      | int            | AI |
| name    | String         |    |
| address | JSON(longtext) |    |
+---------+----------------+----+

Что я хочу сделать, так это вставить строку Json в столбец address. нравиться:

+----+-----------+------------------------------------------+
| id |   name    |                 address                  |
+----+-----------+------------------------------------------+
|  1 | User name | [{street: "street address", city: "Berlin"}] |
+----+-----------+------------------------------------------+

Я думал о том, чтобы вставить JSON как строку, но я не уверен, что это хорошая идея. Какие-либо предложения?

Нет, не конвертируйте json в строку. У вас уже есть тип данных json в MySQL версии 5.7. Вставьте столбец напрямую. Он принимает.

Sarath Chandra 12.12.2020 20:14

Показанный вами JSON не является допустимым JSON. Вам нужно разделить ключи двойными кавычками.

Bill Karwin 12.12.2020 20:17
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
26 367
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы можете передавать свои данные в виде строки, если они действительны в формате JSON; MySQL с радостью преобразует его для вас под капотом.

insert into mytable (id, name, address)
values (
    1,
    'User name',
    '[{"street": "street address", "city": "Berlin"}]'
);

Альтернативой является использование функций построителя JSON:

insert into mytable (id, name, address)
values (
    1,
    'User name',
    json_array(json_object('street', 'street address', 'city', 'Berlin'))
);
CREATE TABLE people (id INT, name VARCHAR(255), address JSON);

INSERT INTO people (id, name, address)
VALUES (1, 'User name', '[{"street": "street address", "city": "Berlin"}]');

SELECT *
FROM people;
идентификатор имя адрес 1 Имя пользователя [{"город": "Берлин", "улица": "адрес улицы"}]

db<>рабочий пример здесь

Спасибо за повтор. очень ценю это

Assad Rajab 12.12.2020 20:26

Зачем конвертировать в String, если у вас уже есть тип данных JSON в MySQL

INSERT INTO <Table_Name> VALUES ('{street: "street address", city: "Berlin"}');

Этот оператор вставки будет напрямую вставлять ваш массив. Нет необходимости конвертировать.

Посмотрите этот ответ stackoverflow

Спасибо, мужик. я ценю ваш повтор и expain

Assad Rajab 12.12.2020 20:27

Альтернативный ответ @GMB выглядит правильным, но я подумал, что добавлю еще один ответ, чтобы показать, как я реализовал это в предпочтительном для меня формате:

INSERT INTO <table name>  
SET field1 = '123',
    field2 = json_array(‘456’);

Мне нравится перечислять имена полей рядом с их значениями, чтобы мне не приходилось мысленно сопоставлять значения с переменными.

Кроме того, мне не нужен json_object, так как я не ввожу пару ключ:значение — я просто ввожу список значений.

тбх. Это ответ, который я искал :). Другой ответ также хорош и работает.

Assad Rajab 15.08.2022 22:29

Это работает в моем случае. В общем, используйте ARRAY[CAST('{"key": "val"}' as json)].

Пример:

insert into <table_name> (id, name, address)
values ('1', 
        'User name', 
         array[cast('{"street": "street address", "city": "Berlin"}' as json)])

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