首页 > 解决方案 > SyntaxError:提取 JSON 数据时出现意外数字

问题描述

我试图IncPubKey从“0”中提取 JSON 数据,但我收到了 SyntaxError。在 postman 中,返回的部分数据如下所示:

 "ShardCommittee": {
  "0": [{
        "IncPubKey": "12RRMGAEXdtD796sbmyHwNv9oiPPfGYa1r6KssMqXyiUMfT6r86",
        "MiningPubKey": {
          "bls": "184UyUYNPg1ESgEXzUZY6dWjxohyZSvE4f5XnkssHhonRNopAp2bxqxCAToYGUsgeyrWeKQJmnLkgeCm95XYK5mjD2KjFPKkrrwLyiXscUAJ9mVubTCft4Z1ra3S9Ca4ojx1P5ajMNaS2Yc9C1rh8qr2S7VE6KCk7YMnBpdkyWdiTrmGtUUjx",
          "dsa": "16Be2DoUxNMzxidLKBqDC6gMkqMZ9bSijBvpRirvioZiqmVGDkg"
        }
      },
      {
        "IncPubKey": "1VVQRGZFhMyp9LRS1yjyXsW6ugMqtHaYyUYMLutRhy6ASF7AWf",
        "MiningPubKey": {
          "bls": "1ELnsFdz5M4RDvShVvcAKE4bbv6dZED31MeSKgRKhDiYgTiJeWT94zvw2VHeytVxEDExMeemPqXL7DA1CnNBGbjTMarv1vXd1A6oi5JctfM4u8Totjpqr8VNFtQbgHqJ1wSYdFz5hgwEq8QkmDdf71WPPdYEkpG5ow3DYeAAwFkArQZvn1C4F",
          "dsa": "18BTfn7mbDBXgysaHZsrGqbN3T2K3gEChsEXXuzkwKEo96eU3Nf"
        }
      },

但在 google 中,它似乎不喜欢数字“0”。

  for (let i = 0; i < d.Result.ShardCommittee.0.length; i++) {
 sh1.getRange(i + 2, 3).setValue(d.Result.ShardCommittee.0[i].IncPubKey);

}

当我退后一步并将所有数据拉入一个单元格时:

 sh1.getRange(2, 3).setValue(d.Result.ShardCommittee);

这是返回的结果:

{ 0=[Ljava.lang.Object;@41d079f7,  1=[Ljava.lang.Object;@7197d9a6, 2=[Ljava.lang.Object;@23a1916a, 3=[Ljava.lang.Object;@657f1624, 4=[Ljava.lang.Object;@c3808bd, 5=[Ljava.lang.Object;@186f5f86, 6=[Ljava.lang.Object;@60f6425c, 7=[Ljava.lang.Object;@6cc43c2c}

知道如何重写以提取IncPubKey数据吗?

标签: javascriptjsongoogle-apps-scriptgoogle-sheets

解决方案


您不能使用数字作为“点”表示法中的键,而是使用数组样式表示法:

Result.ShardCommittee["0"].length;

d.Result.ShardCommittee.["0"][i].IncPubKey

这是一个 javascript 语法问题,而不是特定于 Google Apps 脚本的问题。

在上一个示例中,您将整个对象写入一个单元格,您会看到将结构转换为字符串的结果。如果要将原始对象写入电子表格中的单元格以供检查,则应首先将它们转换为 JSON。

 sh1.getRange(2, 3).setValue(JSON.stringify(d.Result.ShardCommittee));

推荐阅读