我正在接收JSON数据,我按如下方式提取对象值:
JSON.parse(Result.Data).Obj1
当脚本被破坏时会出现问题,因为{I}数据不存在/包含在我接收的JSON数据中。
我试过了:
Obj1
还尝试过:
if(typeof JSON.parse(Result.Data).Obj1 ==="undefined") { do something }
仍然代码被破坏了,如何解决?
更新
我使用JSON.parse的原因是数据通常在引号之前用反斜杠接收,如if( typeof(JSON.parse(Result.Data).Obj1) =="undefined") { do something }
但在另一个时间它没有Obj1键而没有任何反斜杠并将是这样的:{"Data":"{\"Obj1\":\"value\"}"}
答案 0 :(得分:1)
很难说出你究竟要做什么,然后或许建议一个更好或更清洁的方法去做,但要知道它是否定义你可以做到:
if (JSON.parse(Result.Data).Obj1 === undefined) {
// do something
}
答案 1 :(得分:1)
您不能要求null
或undefined
上的JSON.parse()
可以归还的财产。
使用默认运算符来防止抛出错误:
if( (JSON.parse(Result.Data) || {} ).Obj1 ) alert( "ok" );
如果JSON无效或为空,则不会抛出。
如果Result.Data是假的,那么空对象就会存在,这样当你要求.Obj1
时,它就不会出错。
答案 2 :(得分:1)
仍然代码被破坏了,如何解决?
我认为问题是JSON.parse
正在生成错误,因为您传递的值不是有效的JSON。如果是这种情况,你可以
try...catch
检查值
根据Result.Data
可能具有的值,您可以查看值是否以字符序列{"
开头。如果是,它可能是JSON并且需要被解析。我假设Result.Data
也是一个字符串。
var data = Result.Data.indexOf('{"') === 0 ?
JSON.parse(Result.Data).Obj :
Result.Data;
抓住解析错误
替代方法您总是可以尝试将值解析为JSON,但如果它不是JSON则捕获错误:
try {
var data = JSON.parse(Result.Data).Obj1;
// do something with data;
} catch(error) {
// maybe validate that `error` is a JSON.parse error
// Result.Data is not JSON, do whatever you want to do in this case here
}