某些功能正在破坏我的json文件

时间:2017-01-18 22:35:55

标签: javascript jquery json

我有一个名为test.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 个答案:

答案 0 :(得分:0)

第一次有对象时,键是1和2。

你有一个数组,所以第一个键是0和第二个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

答案 1 :(得分: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