2015-12-28 45 views
0

我有以下存储在数据库领域json字符串:从JSON字符串“外部”键/值删除空格值

{"name" : "John Paul Mark", "surname" : "Johnson"} 

注意name由3个不同的名字组成的,他们之间的空白。

我需要修剪的字符串去除jsonkey/values之间的空格,为了得到这个最终的字符串:

{"name":"John Paul Mark","surname":"Johnson"} 

离开触及的空格内key/values

我试图使用Replace(@myString, ' ', ''),但它不像预期的那样工作,因为它将json字符串中的空格替换为全部

有什么想法?有没有我可以使用的原生sql功能,而不是创建自定义功能?

感谢

+0

的SQL Server/Oracle的/ PostgreSQL的或 “” ''? – lad2025

+0

@ lad2025 sql-server,标记已更新。谢谢! – BeNdErR

回答

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

原生JSON支持将可用于SQL Server 2016

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;