不幸的是,我有一個遺留的API端點,只支持扁平的JSON對象的輸出。其輸出之一看起來像這樣。部分扁平化的JSON的反序列化
{
"objects": [
{
"id": "1",
"last-modified": "0",
"created": "1",
"name": "Test",
"fields": "{\"k\":\"v\",\"k2\":\"v2\",\"k3\":[1,2,3],\"k4\":{}}"
}
],
"attribs": {}
}
雖然這是有效的JSON,對象的任何嵌套部分將被字符串化並返回作爲整體對象只有一個鍵深。當我的JS檢索這個對象時,我試圖使用我編寫的遞歸函數反序列化對象的所有可反序列化的部分。
var loads = function (obj) {
var i, buffer;
if (obj instanceof Array) {
buffer = [];
for (i = 0; i < obj.length; i++) {
buffer.push(loads(obj[i]));
}
return buffer;
} else if (obj instanceof Object) {
buffer = {};
for (i in obj) {
if (obj.hasOwnProperty(i)) {
buffer[i] = loads(obj[i]);
}
}
return buffer;
} else if (typeof obj === 'string') {
return JSON.parse(obj);
} else {
return JSON.parse(obj);
}
};
顯然,遞歸是錯誤的,因爲很多「意外的標記」和「意外的標識符」錯誤都是由這個函數拋出。
我在這個函數中做了什麼錯誤,以防止字符串化JSON值的完全嵌套反序列化?
難道你不能簡單地解析'fields'鍵:'JSON.parse(answer.fields);'? – nietonfir
@nietonfir不......不幸的是,這個例子中的json已經大大簡化,僅僅展示了我目前面臨的挑戰。 – Brian