如果JSON解析对象不存在,如何避免脚本损坏
How to avoid broken script if JSON parse object not present?
我正在接收JSON数据,其中我正在提取对象值,如下所示:
JSON.parse(Result.Data).Obj1
当脚本被破坏时,问题就会出现,因为Obj1
不存在/不包含在我接收的JSON数据中。
我试过了:
if(typeof JSON.parse(Result.Data).Obj1 ==="undefined") { do something }
也尝试过:
if( typeof(JSON.parse(Result.Data).Obj1) =="undefined") { do something }
但代码仍然被破坏,如何解决?
更新:
我使用JSON.parse的原因是,数据通常在引号之前带有反斜杠,就像{"Data":"{'"Obj1'":'"value'"}"}
一样。但在另一个时间,它没有Obj1键,也没有任何反斜杠,并且会是这样的:{"Data":"value"}
但代码仍然被破坏,如何解决?
我认为问题是JSON.parse
生成了一个错误,因为您传递的值不是有效的JSON。如果是这样的话,你可以选择
- 首先检查该值,看它是否像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
}
很难说你到底想做什么,然后可能会建议一种更好或更干净的方法来做,但要知道它是否已经定义,你可以只做:
if (JSON.parse(Result.Data).Obj1 === undefined) {
// do something
}
您不能要求null
或undefined
上的属性,JSON.parse()
可以返回该属性。
使用默认运算符来防止抛出错误:
if( (JSON.parse(Result.Data) || {} ).Obj1 ) alert( "ok" );
如果JSON无效或为空,则不会抛出。如果Result.Data是falsy,那么空对象就会出现,这样当您请求.Obj1
时,它就不会异常。
相关文章:
- scriptlet中的脚本-如何避免不好的实践
- 避免使用神秘的javascript"脚本错误”;使用cdn
- nodejs-如何修复服务器脚本以避免崩溃
- 如果JSON解析对象不存在,如何避免脚本损坏
- 如何避免在我没有的远程脚本上运行javascript错误't控制
- 避免'脚本没有响应'使用反向AJAX/Comet
- 避免“;无响应脚本"foreach循环中的消息
- 一个可翻译成JavaScript的脚本,带有callback-hell自动避免器
- 避免在变量之一未定义所有脚本停止工作时出错
- 输出脚本标签而不带jQuery,避免执行
- 为什么空结果会冻结脚本以及如何避免它
- 如何在文本框上输入时避免 css 和脚本效果
- 将 HTML 源代码注入 iframe 以避免跨站点脚本问题
- 如何避免在 js/ajax 脚本中对应用程序上下文路径进行硬编码
- 避免仅使用前端脚本对 Google 进行地理编码的多次请求
- ie8javascript停止脚本我可以使用settimeout来中断执行并避免错误
- Node.js/JavaScript-避免用户输入脚本和html实体
- 避免“;是否停止脚本"IE中的对话框
- 避免谷歌应用程序脚本中的formatDate错误
- 如何在js解释器工作期间防止/避免脚本执行