在Node JS中的JSON对象中解析JSON数组

时间:2015-02-13 15:53:47

标签: arrays json node.js

我在Node js客户端的以下代码中收到了以下JSON:

res.on('data', function (chunk) {
        var parsedResponse = JSON.parse(JSON.stringify(chunk));
        console.log(parsedResponse);
    });

控制台输出:

{  "response" : {
"results" : [ {
  "events" : {
    "numAvlEvents" : 161,
    "numDtcEvents" : 0,
    "numJbusEvents" : 0,
    "numJbusDtcEvents" : 0,
    "numObdProvisionEvents" : 0,
    "numDeviceCommandResponseEvents" : 0,
    "avlEvents" : [ {
      "avlEvent" : {
        "deviceId" : 35,
        "eventTime" : "2015-02-13T08:05:40.000Z",
        "eventType" : "ALIVE",
        "gps" : {
          "gps" : {
            "carrier" : 410,
            "gpsValidity" : true,
            "hdop" : 4.0,
            "latitude" : 33.7974925,
            "longitude" : -85.16405,
            "odometer" : 0.0,
            "satellites" : 9
          }
        },
        "telemetry" : {
          "telemetry" : {
            "altitude" : 37327,
            "odometer" : 0.0,
            "speed" : 0
          }
        }
      }
    }, {
      "avlEvent" : {
        "deviceId" : 35,
        ...
      }
    } ]
   }
  } ]
 }
}

我似乎无法弄清楚如何访问" avlEvents"的内容。数组似乎嵌套在"事件"对象,它反过来嵌套在"结果"数组,反过来嵌套在"响应"对象

我已尝试过多次parsedResponse.response.results迭代[' events']。avlEvents都会产生某种错误,例如: 无法阅读财产'结果'未定义的。我此时有点失落,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

parsedResponse.response.results是一个简单的数组,应该使用数字索引进行访问。

因此,你想要

parsedResponse.response.results[0].avlEvents

然而,这不是你的问题。

你正在阅读一个小溪。我的 guess 是你试图从该流中读取整个JSON字符串,但是你的data处理程序正在处理块。因此,很有可能您没有在一个块中获取完整的JSON字符串,因此您的代码不合适。

同样,我刚刚意识到你正在进行字符串化,然后解析你疯狂的数据。那些方法是彼此相反的。要么你得到一个JSON字符串,要么你没有。

在这种情况下,你可能会得到一个JSON字符串,所以你需要解析它,一旦你完全拥有它。