2016-09-06 32 views
2

UPDATE解析JSON結果和創建自定義對象時,它

在這篇文章的所有解決方案回答我的問題,但我只能標記一個爲例外的答案...

我有這樣的JSON結果:

[ 
    { 
     "unsorted1":[7,7,10,3,3] 
    }, 
    { 
     "unsorted2":[8,9,3,10,6] 
    } 
] 

我想作在JavaScript的陣列,其具有每個「unsorted1」和「unsorted2」作爲鍵,第e [7,7,10,3,3]和[8,9,3,10,6]必須保持JSON格式。像這樣的對象unsorted1:[7,7,10,3,3]和unsorted2:[8,9,3,10,6]

這是我在瀏覽器中使用console.log(JSON.parse(returnVar));參數保存的returnVar參數我從上面得到的JSON結果。

enter image description here

我讀了很多,嘗試了很多,但沒有接近我想要的東西。不知怎的,我無法完成它。

我試圖修改沒有成功驗證碼

var resultObj = {}; 
for (var key in returnVar) { 
    if (returnVar.hasOwnProperty(key)) { 
     var val = returnVar[key]; 
     console.log("val: " + val); 
     var keyName = Object.keys(val); 
     console.log("key Name: " + keyName); 
     for (var keykey in val) { 
      if (val.hasOwnProperty(keykey)) { 
       var valval = val[keykey] 
       resultObj[keyName] = JSON.stringify(valval); 
      } 
     } 
    } 
} 

回答

1

//if the Json result is an object - this is how you parse it 
 

 
var objJson = [{ 
 
    "unsorted1": [7, 7, 10, 3, 3] 
 
}, { 
 
    "unsorted2": [8, 9, 3, 10, 6] 
 
}]; 
 

 
function parse() { 
 
    if (Array.isArray(objJson) === true) { 
 
    objJson.map(function(i) { 
 
     //alert(JSON.stringify(i)); 
 
     console.log(JSON.stringify(i)); 
 
    }); 
 
    }; 
 
} 
 
parse(); 
 

 
//if your json result is a string - this is how you do it 
 
var strJson = "[{\"unsorted1\": [7, 7, 10, 3, 3]}, {\"unsorted2\": [8, 9, 3, 10, 6]}]"; //dont worry about the escaped quotes here - this is a string that is represented here.. but it will work if your JSON result is a string. 
 

 
function parseString() { 
 
    var objJson = JSON.parse(strJson); 
 
    if (Array.isArray(objJson) === true) { 
 
    objJson.map(function(i) { 
 
     //alert(JSON.stringify(i)); 
 
     console.log(JSON.stringify(i)); 
 
    }); 
 
    }; 
 
} 
 
parseString();

+0

我的結果在unsorted1和unsorted2之前和之後沒有反斜槓。我從C++代碼中獲得了該帖子開頭所述的JSON結果。 – TalG

+0

@TalG更新我的腳本上面.. – Jaya

+0

有沒有辦法不使用JSON的'JSON.parse()'函數結果是一個字符串? – TalG

1

你可以試試這個代碼:

var response = [ 
    { 
    "unsorted1":[7,7,10,3,3] 
    }, 
    { 
    "unsorted2":[8,9,3,10,6] 
    } 
]; 

var customObject = response.reduce(function(result, item) { 
    var keys = Object.keys(item); 

    if(keys.length) { 
    result[keys[0]] = item[keys]; 
    } 

    return result; 
}, {}); 
+0

當我改變'result [keys [0]] = item [keys];'result'[keys [0]] = JSON.stringify(item [keys] );' – TalG

1

var a = [ 
 
    { 
 
     "unsorted1": [7, 7, 10, 3, 3] 
 
    }, 
 
    { 
 
     "unsorted2": [8, 9, 3, 10, 6] 
 
    } 
 
] 
 

 
var b = {} 
 

 
a.forEach(function(x) { 
 
    Object.keys(x).forEach(function(y) { 
 
     b[y] = JSON.stringify(x[y]) 
 
    }) 
 
}) 
 

 
console.log(b);

+0

這也是完美的。有沒有辦法做到這一點,而不先使用'JSON.parse(a);'。問題是JSON數組作爲字符串從我的C++代碼發送。我是否必須更改我的C++代碼才能將其作爲數組發送,而不是字符串? – TalG

+0

@TalG:我已根據您的評論更新了我的答案。第一個版本是如果給定的對象是'JsonObject',則下一個版本是如果你的結果是'string'的話。你也需要用相關的細節來更新你的問題,以瞭解你如何獲得結果 - 你說'C++'你究竟是什麼意思?這是服務器端代碼嗎?你所謂的'C++'如何傳遞這個結果對象,或者你如何從客戶端調用它? – Jaya