我在db字段中存储了以下json
字符串:
{"name" : "John Paul Mark", "surname" : "Johnson"}
请注意name
由3个不同的名称组成,它们之间有空格。
我需要修剪字符串,删除json
key/values
之间的空格,以获得最终字符串:
{"name":"John Paul Mark","surname":"Johnson"}
保留内部空白 key/values
值。
我尝试使用Replace(@myString, ' ', '')
,但它无法正常工作,因为它取代了所有 json字符串中的空格。
有什么想法吗?是否有我可以使用的本机sql功能而不是创建自定义函数?
由于
答案 0 :(得分:1)
不理想的解决方案(当密钥/值本身包含:
或,
时可能会失败),但解决方法应该有效:
CREATE TABLE #tab(col VARCHAR(1000));
INSERT INTO #tab(col)
VALUES ('{"name" : "John Paul Mark", "surname" : "Johnson"}');
SELECT col,
[after_removing] = REPLACE(REPLACE(col, ' : ', ':'), ', ', ',')
FROM #tab;
的 LiveDemo
强>
答案 1 :(得分:0)
以下代码适用于MySql,以防没有':'或","在键/值
中create table json_array (json varchar(1000));
insert into json_array(json) values('{"name" : "John Paul Mark", "surname" : "Johnson"}');
select concat(concat(concat(concat(trim(substr(json, 1, locate(':', json)-1)),':'), concat(trim(substr(json, locate(':', json)+1, locate(',',json)-locate(':' , json)-1 ) ),',')), concat(trim(substr(json, locate(',', json)+1, locate(':',json, locate(':', json)+1)-locate(',', json)-1 ) ),':')), trim(substr(json, locate(':', json, locate(':', json)+1)+1))) as output from json_array;