【问题标题】:Can't access data inside an object - rookie Javascript question无法访问对象内的数据 - 菜鸟 Javascript 问题
【发布时间】:2021-01-02 06:00:56
【问题描述】:

这是一个关于访问对象内的数组并将其转换为 JSON 的菜鸟问题。

运行下面的 GET 方法时遇到的错误:

无法读取未定义的属性“VehicleList”

如何解决这个问题?

let get = https.get(
    {
    hostname: 'xyz.com',
    path: path_get_all_vehicles //this variable is known and passed into path
    },
    (getRes) => {
      console.log(`executing getRes...`);
      var reply = "";
      getRes.on("data", (chunk) => {
        (reply += chunk);
        }
      );
      getRes.on("end", () => {
        gotCars(JSON.parse.stringify(reply.Response.VehicleList)); //ERROR
        }
      );
    }
  );

数据格式如下图,思路是访问VehicleList数组,将其转换为JSON,解析后传递给函数gotCars

{
  "ResponseStatus": 1,
  "Response": {
    "VehicleList": [
      {
        "ID": AAA,
        "BrandID": 89,
        "ModelID": 980,
        "VersionID": 11289
      },
      {
        "ID": BBB,
        "BrandID": 89,
        "ModelID": 980,
        "VersionID": 8338
      },
    ],
    "VehicleCount": 17866
  }
}

【问题讨论】:

  • 你能在打电话给gotCars()之前做一个console.log(reply)吗?
  • 看起来您构建reply 的方式是将块附加到字符串。所以我最好的猜测是,当你的end 处理程序执行时,reply 已经是一个字符串化的 JSON 对象。我建议先尝试在您的处理程序中将reply 设置为等于JSON.parse(reply),然后然后尝试gotCars(JSON.parse.stringify(reply.Response.VehicleList))
  • 什么是JSON.parse.stringify()JSON.parse() 将 JSON 转换为对象/数组,JSON.stringify() 将对象/数组转换为 JSON。

标签: javascript node.js arrays json get


【解决方案1】:

表达式JSON.parse.stringify(reply.Response.VehicleList) 无效有几个原因:

  • 全局 JSON.parse 没有名为 stringify 的属性 (undefined)
  • 无法调用undefined
  • 全局String.prototypereply 是一个字符串)没有名为Responseundefined)的属性
  • undefined 无法编入索引

我假设您尝试将 reply 解析为 JSON,然后从结果中获取 VehicleList 数组,请尝试以下代码:

let get = https.get(
  {
    hostname: "xyz.com",
    path: path_get_all_vehicles // this variable is known and passed into path
  },
  (getRes) => {
    console.log(`executing getRes...`);
    var reply = "";
    getRes.on("data", (chunk) => {
      reply += chunk;
    });
    getRes.on("end", () => {
      gotCars(JSON.parse(reply).Response.VehicleList);
    });
  }
);

【讨论】:

    【解决方案2】:

    您首先需要解析reply,这将创建对象。然后你就可以访问它的属性了。

          getRes.on("end", () => {
            const obj = JSON.parse(reply);
            gotCars(obj.Response.VehicleList);
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多