Используйте JSON_EXTRACT, JSON_SET, JSON_REPLACE, JSON_INSERT в массиве json

У меня есть столбец типа json в mysql с именем names и его простой массив json (не ключ / значение). Я не смог найти ни одного примера использования JSON_EXTRACT, JSON_SET, JSON_REPLACE, JSON_INSERT для простого поля массива json.

Я знаю, что есть другие способы манипулировать массивом json в типе поля json, но можно ли использовать эти функции для массива json?

например, поле name содержит ["A","B","C"], как я могу использовать эти функции для выполнения обновления, вставки и удаления этого json?

Обновить

запрос должен выполняться из скрипта php

Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
1 025
2

Ответы 2

Ваше значение не является допустимым массивом JSON для MySQL. Он должен быть в формате ["A", "B", "C"]. Как только это произойдет, все функции, на которые вы ссылаетесь, будут работать точно так, как ожидалось и описано в руководство по эксплуатации; то есть JSON_SET вставит или заменит, если значение уже существует, JSON_INSERT вставит, если значение еще не существует, а JSON_REPLACE заменит ранее существовавшее значение.

-- extract second element
select json_extract('["A", "B", "C"]', '$[1]')
"B"

-- replace second element
select json_set('["A", "B", "C"]', '$[1]', 'D')
["A", "D", "C"]

-- insert fourth element
select json_set('["A", "B", "C"]', '$[3]', 'E')
["A", "B", "C", "E"]

-- attempt to insert second element fails as it already exists
select json_insert('["A", "B", "C"]', '$[1]', 'F')
["A", "B", "C"]

-- insert fourth element
select json_insert('["A", "B", "C"]', '$[3]', 'F')
["A", "B", "C", "F"]

-- replace second element
select json_replace('["A", "B", "C"]', '$[1]', 'G')
["A", "G", "C"]

-- attempt to replace non-existing element fails
select json_replace('["A", "B", "C"]', '$[3]', 'G')
["A", "B", "C"]

спасибо за ответ, я просто обновляю вопрос, я выполняю запросы не из консоли, а из скрипта php. и мне нужно указать имя таблицы и имя поля. Можете ли вы привести примеры запросов, которые можно выполнить по сценарию? а что такое $[1] и $[3]?

Mohammad Salehi 17.08.2018 14:59

я думаю нашел решение

для массива json невозможно использовать JSON_EXTRACT, JSON_SET, JSON_REPLACE, JSON_INSERT по значениям массива, и вы должны знать место каждого значения в массиве json (на мой взгляд, это слабость).

например, чтобы выбрать 2-е значение, вы можете использовать $[1], но для вставки значений вы можете использовать JSON_ARRAY_APPEND и JSON_ARRAY_INSERT

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