从本地文件+解析创建json变量

时间:2014-06-09 21:04:32

标签: jquery json

我目前读取了一个本地json文件,并在javascript中解析它,如下所示:

 $.getJSON("steps4.json", function(data){
      $.each(data.data.steps, function(i, step){
        ...
      });
});

我想从JSON文件创建一个变量并使用它来操作数据(因此我不会覆盖“steps4.json”中存在的内容)。

我希望它看起来像这样:

var json_copy = $.getJSON('steps4.json');
$.getJSON(json_copy, function(data){
     // do stuff with the data here
});

但当然我上面所说的不起作用。您如何建议我使用局部变量副本来解析数据?

解决方案

我最终调用了以下函数:

$(function(){
      $.getJSON("steps4.json", function(data){
        json_copy = data;
        loadMap(json_copy);
      });
    });

 function loadMap(data_json){
      $.each(data_json.data.steps, function(i, step){
       ....
     });
  });

1 个答案:

答案 0 :(得分:1)

您可以在对对象执行可能的破坏性操作之前克隆该对象。

只需对其进行字符串化并再次解析

var original_json = $.getJSON('steps4.json');
var json_copy=JSON.parse(JSON.stringify(original_json));

json文件的内容,因为它存储在hdd中,不会通过对其解析数据的前端操作进行更改。

编辑:只是为了详细说明我的答案。让我们说解析json文件之后你已经

var original_json={firstkey: {'a': 1, 'b': 2, 'c': 3}};
> original_json
> Object {firstkey: Object}

破坏性操作,例如

original_json.firstkey='This is a String';
   > original_json
   > Object {firstkey: 'This is a String'}

会覆盖original_json.firstkey的原始值。

如果您引用它,它仍会被覆盖

var original_json={firstkey: {'a': 1, 'b': 2, 'c': 3}};
var json_copy=original_json;
json_copy.firstkey='This is a String';
    > original_json
    > Object {firstkey: 'This is a String'}

如果你克隆它:

var original_json={firstkey: {'a': 1, 'b': 2, 'c': 3}};
var json_copy=JSON.parse(JSON.stringify(original_json));
json_copy.firstkey='This is a String';
    > original_json
    > Object {firstkey: Object}

因此,如果您需要原始值original_json,则无需执行aditional请求。