2016-09-20 4 views
0

잘못된 json stringify 데이터가 postgres 데이터베이스에서 반환되었습니다.필자의 경우 잘못된 JSON을 수정하는 방법은 무엇입니까?

그것은 유효하지 않은 문자열의 데이터 내 코드에서

{"{\"title\":\"john\"}","{\"tel\":\"12345\"}"} 

처럼, 나는이 유효하게하려면 다음을 사용

var newJson = '"' + mydata.info.replace(/","/g, ",").replace(/^{"/, "[").replace(/"}$/, "]") + '"'; 

을 그러나, 나는 JSON.parse(newJson)을 수행 할 때, 그것은 여전히 ​​준 나 대신 개체의 문자열.

newJson = "["{\"title\":\"john\"},{\"tel\":\"12345\"}"]" 
newJson = JSON.parse(newJson) 

console.log(typeof newJson) => object 

이 실제로 나에게 객체를 준 것입니다 : 내가 좋아하는 직접 지정하는 경우 재미있는 것은이 방법

console.log(newJson) => "["{\"title\":\"john\"},{\"tel\":\"12345\"}"]" 

를 교체 한 후

newJson 값은 다음과 같다.

나는 몇 시간 동안이 잘못된 json과 싸우려고 노력했으며 실제로 내가 할 수있는 것이 무엇인지 모릅니다. 누구든지 도와 줄 수 있습니까? 고마워요!

+1

당신은 아마도 두 번 원래의 데이터를 인코딩하는 (뭔가 지금 표시 공유 한 코드에서). 문자열 조작 함수를 사용하여 표준 데이터 형식을 조작해서는 안됩니다. –

+0

Postgres에서'json []'(일명'json' 배열) 타입을 사용하지 않습니까? 그게 당신의 결과물처럼 보이기 때문이죠. – pozs

답변

1

의견에 제안 된대로 DB 내부에 저장된 데이터를 수정해야합니다. 데이터는 여러 번 json 인코딩됩니다. 그게 정말 가능하지 않으면

이 같은 뭔가를 읽고 (테스트되지 않은) 시도 할 수 있습니다 :

// First replace the first and last {} with [] 
var arrStr = '[' + json.substring(1, json.length - 1) + ']'; 
// Parse it as an array of strings 
var arr = JSON.parse(arrStr); 
// Cycle every item in the array and parse it 
var results = []; 
for (var i = 0; i < arr.length; i++) { 
    results.push(JSON.parse(arr[i])); 
} 
1
newJson = JSON.parse(JSON.stringify(newJson)) 

시도의 사용이

관련 문제