你不能用
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