Py学习  »  DATABASE

创建分组数据的MySQL JSON函数有问题

Floobinator • 5 年前 • 1674 次点击  

我在MySQL中有以下简单的JSON结构。

{"person_main":{"name_first": "Mike"}}

{"person_main":{"name_first": "Mike", 
 "skills": [
  {"Name": "Learning", "Proficiency": 3}, 
  {"Name": "Teaching", "Proficiency": 2}
]}}

我不知道如何将“Skills”数据作为组内容插入到基本JSON结构中 使用MySQL JSON函数

虽然下面的代码不起作用,但我想做的是:

SET @tempvar = '{"person_main":{"name_first": "Mike"}}';
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Name', 'Learning');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Proficiency', '3');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Name', 'Teaching');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Proficiency', 2);

我到底该如何用MySQL完成这个任务呢?我只想在一个子字段中构建一组还不存在的内容。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55753
文章 [ 1 ]  |  最新文章 5 年前
Nick
Reply   •   1 楼
Nick    5 年前

你不能用

JSON_SET(@tempvar, '$.person_main.skills[0].Name', 'Learning');

因为 skills JSON_SET . 在尝试设置之前,您可以手动创建所有片段,但使用起来可能更容易 JSON_ARRAY JSON_OBJECT

SET @tempvar = '{"person_main":{"name_first": "Mike"}}';

SET @tempvar = JSON_INSERT(@tempvar, '$.person_main.skills', 
                               JSON_ARRAY(
                                   JSON_OBJECT('Name', 'Learning', 'Proficiency', 3),
                                   JSON_OBJECT('Name', 'Teaching', 'Proficiency', 2)
                               )
                           );

SELECT @tempvar;

输出:

{"person_main": {"skills": [{"Name": "Learning", "Proficiency": 3}, {"Name": "Teaching", "Proficiency": 2}], "name_first": "Mike"}}

Demo on dbfiddle

如果必须使用所述样式的代码,则必须在尝试设置每个片段的值之前手动创建每个片段:

SET @tempvar = '{"person_main":{"name_first": "Mike"}}';
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills', JSON_ARRAY());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0]', JSON_OBJECT());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Name', 'Learning');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Proficiency', '3');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1]', JSON_OBJECT());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Name', 'Teaching');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Proficiency', 2);
SELECT @tempvar;

{"person_main": {"skills": [{"Name": "Learning", "Proficiency": "3"}, {"Name": "Teaching", "Proficiency": 2}], "name_first": "Mike"}}

Demo on dbfiddle