In MySQL, 有一些函数可以帮我们处理JSON类型包括: JSON_SET()
, JSON_INSERT()
, and JSON_REPLACE()
函数.
语法
三种函数的语法:
JSON_SET(json_doc, path, val[, path, val] ...)
JSON_INSERT(json_doc, path, val[, path, val] ...)
JSON_REPLACE(json_doc, path, val[, path, val] ...)
参数的含义:
json_doc 是JSON字符串
path
是要插入数据或更新值的元素的路径。val
是新的值.
The Difference
- JSON_SET() 替换已经存在的值,增加不存在的值。
- JSON_INSERT() 新增不存在的值。
- JSON_REPLACE() 替换/修改已经存在的值。
基本上他们的区别就是对已经存在的值怎么办,对缺少的值怎么办?( JSON_SET()
两个功能都有).
Example 1 – Insert a Value
接下来以JSON_SET作为一个例子
JSON_SET()
1.更新部分字段 "ui:options"
UPDATE s_template
SET config = JSON_SET (
config,
'$.propsSchema.properties.summary."ui:options"',
cast(
'{
"row": "5",
"placeholder":"拜访小结不可低于50字..."
}' AS json
)
)
WHERE
u_id = 'yaan-rw-001';
2.更新部分字段,新增字段 "ui:widget": "TextareaWidget",
UPDATE s_template
SET config = JSON_SET (
config,
'$.propsSchema.properties.summary',
cast('{
"type": "string",
"title": "拜访小结",
"ui:widget": "TextareaWidget",
"default": "",
"minLength": 50,
"sortIndex": 11,
"ui:hidden": "{{formData.flowType === ''plan' '}}",
"ui:options": { "row": 5 ,"placeholder": "拜访小结不可低于50字..."},
"description": "50字以上",
"ui:labelWidth": 130
}' AS json
)
)
WHERE
u_id = 'yaan-rw-001';
注意转义单引号和双引号问题
结果