如何定义JSON对象值的默认值

时间:2016-03-17 03:58:18

标签: javascript jquery json ajax

我现在有一个JSON字符串,它会作为外部系统的结果返回。作为返回的对象的一部分,有可能某些预期变量可能不存在,因为如果外部系统不存在则不会返回任何内容。

示例

data.columns.state.name

可能不会返回状态,但如果在外部系统中找不到任何内容,它也可能也不会返回许多其他对象。

有一种简单的方法来设置一些默认值,这样如果它没有返回,我有一个变量准备好等待...... - 提前谢谢

2 个答案:

答案 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;
&#13;
&#13;