当前位置: 首页 > 知识库问答 >
问题:

有没有更漂亮的方法来捕获JSON数组块上的错误?[重复]

慕仲渊
2023-03-14

我在JSON中有一堆数据需要解析,但其中一些不存在。

因此,我目前有以下try/cat(e),但是有没有更优雅的方法呢?

for (var u = 0; u < 100; u++) {
      try {
        var reactions = JSON.parse(dataParsed.data[u].reactions.summary.total_count)
      } catch (err) {
        console.log(err)
        var reactions = 0
      }
      try {
        var comments = JSON.parse(dataParsed.data[u].comments.summary.total_count)
      } catch (err) {
        var comments = 0
      }
      try {
        var shares = JSON.parse(dataParsed.data[u].shares.count);
      } catch (err) {
        var shares = 0
      }

      postArray.push({
        "id": dataParsed.data[u].id,
        "message": dataParsed.data[u].message,
        "createdTime": dataParsed.data[u].created_time,
        "fullPicture": dataParsed.data[u].full_picture,
        "reactions": reactions,
        "comments": comments,
        "shares": shares
      })
}

共有3个答案

姬慎之
2023-03-14

只需使用value | 0通过二进制操作捕获值。如果value存在,则返回value如果不存在,则返回0

暴骏奇
2023-03-14

制作一个函数:

function safeParse(propStr) {
  let r = 0;
  try {
    r = propStr.split(/\.|\[|\]/g).reduce((a, c) => a[c], {});
  } catch(e) {}
  return r;
}

var reactions = safeParse("dataParsed.data[u].reactions.summary.total_count");
var comments = safeParse("dataParsed.data[u].comments.summary.total_count");
var shares = safeParse("dataParsed.data[u].shares.count");
齐典
2023-03-14

您可以使用

var reactions = dataParsed && dataParsed.data[u] &&  dataParsed.data[u].reactions && dataParsed.data[u].reactions.summary && dataParsed.data[u].reactions.summary.total_count || 0

有一个关于可选链式连接和Nulish聚合的提议

var reactions = dataParsed?.data[u]?.reactions?.summary?.total_count ?? 0

 类似资料:
  • 我想获取字节数组的流,但我知道没有获取字节数组流的方法。 我的问题, 为什么不支持此功能? 如何获取字节数组流? 注意:我知道我可以使用< code>Byte[]而不是< code>byte[],但是这并没有回答我的问题。

  • 我使用beautifulsoup查找网页上的页数,但在编写代码时: 它给出了以下错误: 回溯(最近一次调用):文件“C:/Users/HangaarLab/Desktop/sonartik/sonartik.py”,第13行,在soup=BeautifulSoup(response.text)TypeError中:“模块”对象不可调用 在另一台计算机中,代码运行,但它给出了以下警告: UserWa

  • 问题内容: 我正在尝试使用杰克逊对POJO进行序列化和反序列化。从POJO到JSON可以完美地工作,而从另一个方向去则不行。 我有一个POJO 并运行和测试我运行了calendar.model包; 引发异常 我已经尽力将JSON转换为POJO了,但是没有。如果我从JSON映射到Map类型,它确实可以工作。 谢谢您的帮助 编辑 这是我依赖中的杰克逊的grep 看起来除了jackson2之外,没有其他

  • 除了把它们全部输入外,还有没有更好的方法在字符串中列出它们?

  • 我正在尝试从下面的git链接运行代码 但我有个错误 nosuchMethodError:没有静态方法getFont(landroid/content/context;ilandroid/util/typedvalue;ilandroid/widget/textview;)landroid/graphics/typeface;在Landroid/Support/V4/Content/Res/Reso

  • 问题内容: 我有一个URL 。当我添加此文件时 现在将允许我使用链接。但是我该怎么做呢? 另外,我怎样才能使这个网址?谢谢。对不起,我还比较陌生。 问题答案: 感谢您的想法@denoise和@mogosselin。也可以使用@stslavik指出我的代码示例的某些缺点。 这是我的方法: 通过使用我得到的链接 而 这是我的目标。我只会用PHP做其他事情。