2017-01-18 7 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""2"をリード欠けて表示されていない場合

{ 
"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" } } 
} 

私は最新の安定版のChromiumを使用しています。

編集:backToString変数の周りに[]を実現します。クリップをクリッピングした後も、問題は引き続き発生します。最初のキーが0であるので、あなたは、配列を持った後、あなたがオブジェクトを持って

+2

元のオブジェクトは、{{"1":x、 "2":y} 'です。これを配列に変換します: '[x、y]'。次に、配列を変更します。その後、配列をオブジェクトに戻します。そうではありません。 –

+0

オブジェクトを配列に変換します。もちろんそれは同じではないでしょう。 –

+0

@ChrisG配列をjson文字列に戻します。配列には戻しません。私はそれをオブジェクトに戻すとは決して言わなかった。あなたの皮肉は必要ない。 'var backToString = JSON.stringify(array);' – Kajcioch

答えて

0

まず時間は、キーが1と

2であり、第二1.あなたは選択の余地がありません。

Stringで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 
関連する問題