при поиске способа вставки массива в отдельные столбцы БД я нашел статью о вставке строки 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. Вам нужно разделить ключи двойными кавычками.
Вы можете передавать свои данные в виде строки, если они действительны в формате 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;
db<>рабочий пример здесь
Спасибо за повтор. очень ценю это
Зачем конвертировать в String, если у вас уже есть тип данных JSON в MySQL
INSERT INTO <Table_Name> VALUES ('{street: "street address", city: "Berlin"}');
Этот оператор вставки будет напрямую вставлять ваш массив. Нет необходимости конвертировать.
Посмотрите этот ответ stackoverflow
Спасибо, мужик. я ценю ваш повтор и expain
Альтернативный ответ @GMB выглядит правильным, но я подумал, что добавлю еще один ответ, чтобы показать, как я реализовал это в предпочтительном для меня формате:
INSERT INTO <table name>
SET field1 = '123',
field2 = json_array(‘456’);
Мне нравится перечислять имена полей рядом с их значениями, чтобы мне не приходилось мысленно сопоставлять значения с переменными.
Кроме того, мне не нужен json_object, так как я не ввожу пару ключ:значение — я просто ввожу список значений.
тбх. Это ответ, который я искал :). Другой ответ также хорош и работает.
Это работает в моем случае. В общем, используйте 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)])
Нет, не конвертируйте json в строку. У вас уже есть тип данных json в MySQL версии 5.7. Вставьте столбец напрямую. Он принимает.