2015-12-28 1 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

Native 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; 
Смежные вопросы