2017-01-18 24 views
-2

我有一個名爲test.json的文件。我需要將其內容加載到數組中,使其可以被編輯,然後將其放回到json字符串中,以便將其放入新文件中。某些功能毀了我的json文件

問題是,即使我加載一個文件,將它轉換成一個對象,然後到一個數組,並最終到一個JSON字符串,它是不一樣的。它正在失去一些價值。 爲什麼?

var request = new XMLHttpRequest(); //load a file 
request.open("GET", "levels/test.json", false); 
request.send(null) 
var mapTile = jQuery.parseJSON(request.responseText); //convert json to object 

var array = $.map(mapTile, function(value, index) { 
return value; 
}); //convert object to array 

// code to modify array [...] 

var backToString = JSON.stringify(array); //convert array to json file 

enter image description here

而這裏的原始JSON文件:

{ 
"1": { 
    "1": { "type":"rock", "type2":"solid" }, 
    "2": { "type":"rock", "type2":"solid" }, 
    "3": { "type":"rock", "type2":"solid" }, 
    "4": { "type":"rock", "type2":"solid" } }, 
"2": { 
    "1": { "type":"rock", "type2":"solid" }, 
    "2": { "type":"rock", "type2":"solid" }, 
    "3": { "type":"rock", "type2":"solid" }, 
    "4": { "type":"rock", "type2":"solid" } } 
} 

如果你沒有看到其中的差別,輸出字符串丟失領先"1""2",使其成爲不可讀。

我正在使用最新的穩定版本的Chromium。

編輯:我知道[]圍繞backToString變量。剪切後,問題仍然存在。

+2

原始對象是:'{「1」:x,「2」:y}'。你把它變成一個數組:'[x,y]'。然後你改變數組。然後你將陣列變回obj-哎呀,不,你不知道。 –

+0

your'e將對象轉換爲數組。當然這不會是一樣的。 –

+0

@ChrisG我將數組轉換回json字符串,而不是數組。我從來沒有說過我把它變成一個物體,你的諷刺是不需要的。 'var backToString = JSON.stringify(array);' – Kajcioch

回答

0

你有一個對象第一次,鍵1和2

之後有一個數組,以便所述第一密鑰是0和第二1.您別無選擇。

在字符串中打開JSON數組後。鍵0和1丟失。這只是JSON數組的表示形式:

var t = [{name:"max"},{name:"john"}]; 

沒有關鍵!

var k = 1; 
var array = $.map(mapTile, function(value, index) { 
var o = {}; 
o[k] = value; 
k += 1; 
return o; 
}); //convert object to array 
+0

**這**是我正在尋找的答案。對我的問題「爲什麼?」的補充。非常感謝。 – Kajcioch

+0

我在第一個評論中告訴過你*爲什麼*。 –

0

您需要數組變回一個對象,否則你將失去鍵:如果你想保持你的鑰匙,你可以嘗試是正常

var back = {}; // empty object 
for (var i = 0; i < array.length; i++) { 
    back[i + 1 + ""] = array[i]; // add array elements to it 
} 
var backToString = JSON.stringify(back); //convert array to json file 
相關問題