使用 RESTful API,如果未定义特定的响应 json 级别,我如何在客户端不出错

With RESTful API, how I don't make error in the client side if specific response json level is undefined

本文关键字:级别 客户端 出错 json 响应 如果 API RESTful 未定义 使用      更新时间:2023-09-26

这是一个简单的响应json:

{
  "blog": {
    "title": "Blog"
    "paragraphs": [{
        "title": "paragraph1",
        "content": "content1"
      }, {
        "title": "paragraph2",
        "content": "content2"
      }, {
        "title": "paragraph3",
        "content": "content3"
      }
    ],
    "selectList": ["food", "play", "mood"]
  }
}

如果服务器出现问题,paragraphs属性undefined,如何避免在客户端出错?即使我仍然可以成功获取其他数据,例如blog.titleblog.selectList...等

如果我不想使用:

if (response.blog && response.blog.paragraphs && response.blog.paragraphs....) {
  //do something
}

因为如果JSON对象中有很多级别,那就不是有效的方法。有人有聪明和有效的方法吗?

更新

@MatthewHerbst说:只要检查最低的属性。

如果我只检查最低的属性( response.blog.paragraphs ),那会使 JavaScript 错误,粉碎我的网站。 因为浏览器找到response.blog是未定义的。在实际情况下,如果response.blogundefined,我将得到response.error属性,然后if(response.blog.paragraphs)会遇到错误,因为response对象没有在javascript中定义blog属性。我如何检查最低属性?

你可以为此使用 lodash。 例如

let paragraphs = _.get(response, 'blog.paragraphs', null);
if (!paragraphs) {
    // Couldn't get from response.
} else {
   // Do something with response.blog.paragraphs.
}

你可以做这样的事情-

var blogs = response.blogs;
if(blogs){
    //do something
    var paraData = blogs.paragraphs;
    if (paraData){
        // do some more fun
    }
}

你可以做这样的事情——

var arrKeys = Object.keys(blogs),
newBlogArr = [] // to get the filtered result;
(function(){
    for(i=0;i<arrKeys.length;i++){
    // to get the filtered defined objects only
        if(blogs[arrKeys[i]] !== null || blogs[arrKeys[i]] !== undefined){
            //Now simply push that array in newBlogArr;
            newBlogArr.push(blogs[arrKeys[i]]);
        }
    }
    return newBlogArr;
})();