2016-09-20 82 views
0

我有一個無效的json stringify數據從postgres數據庫回來。如何解決我的情況下無效的JSON?

這是一個無效的字符串和數據就像

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

在我的代碼,我用下面,使其有效:

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

然而,當我這樣做JSON.parse(newJson),它仍然給了我字符串而不是一個對象。

的newJson值是類似以下,如果我直接指定它像更換方法

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

有趣的是後:

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

console.log(typeof newJson) => object 

它實際上給了我一個對象。

我一直在努力爭取這個無效的json幾個小時,真的不知道我還能做什麼。誰能幫忙?非常感謝!

+1

你可能原始數據進行兩次編碼(東西現在顯示在你分享的代碼中)。您絕不應該使用字符串操作函數來操作標準數據格式。 –

+0

你確定你沒有在Postgres中使用'json []'(aka。'json'數組)類型嗎?因爲這就是你的輸出的樣子。 – pozs

回答

1

您應該像修改註釋中所建議的那樣修復保存在數據庫中的數據,這些數據是多次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)) 

嘗試使用這種

相關問題