我目前读取了一个本地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){
....
});
});
答案 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请求。