从json字符串“外部”键/值值中删除空格

时间:2015-12-28 15:52:04

标签: sql-server json trim

我在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功能而不是创建自定义函数?

由于

2 个答案:

答案 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

SQL Server 2016

可以使用原生JSON支持

答案 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;