我现在有一个JSON
字符串,它会作为外部系统的结果返回。作为返回的对象的一部分,有可能某些预期变量可能不存在,因为如果外部系统不存在则不会返回任何内容。
示例
data.columns.state.name
可能不会返回状态,但如果在外部系统中找不到任何内容,它也可能也不会返回许多其他对象。
有一种简单的方法来设置一些默认值,这样如果它没有返回,我有一个变量准备好等待...... - 提前谢谢
答案 0 :(得分:0)
这实际上只是与检查对象值相关的一般编程问题。如果你得到一个json字符串,你可以使用以下代码行解析它:
var json_obj = JSON.parse(pass_json_string_here)
json_obj现在将成为一个普通的javascript对象,您可以编写任何您想要测试存在的值的代码。例如:
if (json_obj.state)
{//do nothing
}
else{
json_obj.state = 'some value'
}
答案 1 :(得分:0)
使用 $.Extend 可以设置默认值,但只有在您了解JSON的结构时才会受到限制。
设置默认值
var jsonDefault = {
columns: {
state: {
name: 'default Name'
}
}
};
然后将返回的数据传入extend函数,此extend函数将合并两个对象,并且如果第二个对象中有任何值,它将被赋予优先级。
$.extend({},jsonDefault.columns, returnedObject.columns);
下面是工作示例,在这里您可以看到名称已更新但使用了zip的默认值,如果有新的列从您的服务器返回,即使它已合并到最终结果中。
var jsonDefault = { // just set all the required defaults.
columns: {
state: {
name: 'default Name'
},
zip : "00000"
}
};
var returnedObj ={ // this obj can have new properties too,
columns: {
state: {
name: 'LA',
order : 21
}
}
};
var result= $.extend({},jsonDefault.columns, returnedObj.columns); // results in merging the two objects and using the defaults where necessary
alert(JSON.stringify(result));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;