Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问Node.js中Json对象上的字段_Javascript_Json - Fatal编程技术网

Javascript 访问Node.js中Json对象上的字段

Javascript 访问Node.js中Json对象上的字段,javascript,json,Javascript,Json,所以我是JavaScript编程新手。我在POST请求中获得此JSON负载: { "subscriptionId" : "asdasdasdasd", "originator" : "localhost", "contextResponses" : [ { "contextElement" : { "type" : "", "isPattern" : "false", "id" : "id", "at

所以我是JavaScript编程新手。我在POST请求中获得此JSON负载:

{
  "subscriptionId" : "asdasdasdasd",
  "originator" : "localhost",
  "contextResponses" : [
    {
      "contextElement" : {
        "type" : "",
        "isPattern" : "false",
        "id" : "id",
        "attributes" : [
          {
            "name" : "temperature",
            "type" : "int",
            "value" : "5"
          }
        ]
      },
      "statusCode" : {
        "code" : "200",
        "reasonPhrase" : "OK"
      }
    }
  ]
}
并使用此代码尝试访问某个字段:

var qs = require('querystring');
var http = require('http');
http.createServer(function (req, res) {
var obj;

if (req.method == 'POST') {
        var body = '';
        req.on('data', function (data) {
            body += data;
            console.log(body.attributes.value);
            if (body.length > 1e6)
                req.connection.destroy();
        });

        req.on('end', function () {
            var post = qs.parse(body);
            // use post['blah'], etc.
        });
    }
}).listen(8087, "188.???.??.???");
console.log('Server running at http://188.???.??.???:8087/');
如您所见,我正在尝试访问value字段并尝试检索数字5。显然,它不起作用。我试着用谷歌搜索,这可能真的很愚蠢。关于如何进入该领域有什么建议吗

编辑:

来自console.log(正文)的数据:

console.log(数据):


由于http模块以字符串形式返回
数据
,因此需要首先将接收到的数据解析为JSON对象:

而不是:

req.on('data', function (data) {
        body += data;
        console.log(body.attributes.value);
        ....
});
这样做:

req.on('data', function (data) {
        var recv = JSON.parse(data);
        console.log(recv.contextResponses[0].contextElement.attributes[0].value);
        ....
});

如果从服务器收到的响应数据与第一段中发布的数据相同,则可以通过
.contextResponses[0].contextElement.attributes[0]访问该值.value

在顶层没有名为attributes的属性,通过向数据添加´´´,您正在将其转换为字符串,您建议怎么做?我使用了这个答案的代码:我建议你不要将它转换为字符串,然后再将payattunon转换为属性调用的值,从顶层转换为你需要的值。谢谢你的快速回答。我尝试了该代码,但它给了我:TypeError:无法读取未定义的属性“value”::这是一个打字错误,我现在已经更新了答案。请看,再次感谢!但是现在它得到了:TypeError:无法读取未定义的属性“0”。我认为您发布的数据可能不是实际的响应。你能用控制台日志(数据)更新你的问题吗?答案更新!我用身体代替数据,但它仍然给我那个错误!
{ subscriptionId: '55817b3b98add18cc3e183be',
  originator: 'localhost',
  contextResponses: [ { contextElement: [Object], statusCode: [Object] } ] }
req.on('data', function (data) {
        body += data;
        console.log(body.attributes.value);
        ....
});
req.on('data', function (data) {
        var recv = JSON.parse(data);
        console.log(recv.contextResponses[0].contextElement.attributes[0].value);
        ....
});