Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 如何在没有任何缓冲区错误的情况下检索JSON键?_Javascript_Node.js_Json - Fatal编程技术网

Javascript 如何在没有任何缓冲区错误的情况下检索JSON键?

Javascript 如何在没有任何缓冲区错误的情况下检索JSON键?,javascript,node.js,json,Javascript,Node.js,Json,下面是我通过使用节点js readFileSync读取文本文件得到的JSON {"MESSAGE":"Triggered for ID 453289","STATUS":"02","APPROVAL_COMPLETED":""} 现在,当我尝试使用下面的代码获取JSON的键时 Object.keys(json); 我发现了下面的错误 The keys are 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

下面是我通过使用节点js readFileSync读取文本文件得到的JSON

{"MESSAGE":"Triggered for ID 453289","STATUS":"02","APPROVAL_COMPLETED":""}
现在,当我尝试使用下面的代码获取JSON的键时

Object.keys(json);
我发现了下面的错误

The keys are 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114
如果我尝试获取JSON元素的值,如下所示

json["STATUS"]; // I also used json.status (neither works)
我得到的值是未定义的

下面是完整的代码

var fs = $.require('fs');
var stream = fs.readFileSync('api.txt', 'utf8');
console.log("Global " +JSON.stringify(stream));
var data = JSON.parse(stream);
var retrievedData = JSON.stringify(data.retrievedData);
var json = JSON.parse(retrievedData);
console.log("The API Output is " +json);
var keys = Object.keys(json);
console.log("The keys are "+keys);
var flag = json["STATUS"];
//var retrievedData = stream.retrievedData;
console.log("flag is "+flag);
详情如下:

Output of Data is 

{"retrievedData":"{\"MESSAGE\":\"Triggered for Group ID 453289\",\"STATUS\":\"02\",\"APPROVAL_COMPLETED\":\"\"}","statusCode":200,"MESSAGE":"API successfully called"}

Output of retrievedData is

{"MESSAGE":"Triggered for ID 453289","STATUS":"02","APPROVAL_COMPLETED":""}

请帮助解决这些问题。

将JSON作为参数传递给Object.keys时,不要将其字符串化

var keys = Object.keys(json);
而不是

var keys = Object.keys(JSON.stringify(json));

将JSON作为参数传递给Object.keys时,不要对其进行字符串化

var keys = Object.keys(json);
而不是

var keys = Object.keys(JSON.stringify(json));
尝试改变

var keys = Object.keys(JSON.stringify(json));
朝向

var keys = Object.keys(json);
这有助于解决您的问题吗?

尝试改变

var keys = Object.keys(JSON.stringify(json));
朝向

var keys = Object.keys(json);

这有助于解决您的问题吗?

您可以直接对retrievedData应用循环以查找密钥:-

for(var temp in retrievedData)
{
   console.log(temp)
}

此处是您的密钥

您可以直接对检索到的数据应用循环来查找密钥:-

for(var temp in retrievedData)
{
   console.log(temp)
}

这里的temp将是您的键

问题在于您的数据是一个字符串,因此您需要将其解析为一个对象:

让输入=“{消息:为ID 453289触发,状态:02,批准完成:}” console.logObject.keysinput; 让parsed=JSON.parseinput; console.logObject.keysparsed;
console.logparsed['STATUS'] 问题在于数据是字符串,因此需要将其解析为对象:

让输入=“{消息:为ID 453289触发,状态:02,批准完成:}” console.logObject.keysinput; 让parsed=JSON.parseinput; console.logObject.keysparsed;
console.logparsed['STATUS'];[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]这表明您仍然使用字符串执行Object.keys操作,stringify的输出也是如此[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]这表明您仍然使用字符串执行Object.keys-因此,对于Stringify的输出,看起来您只需要执行JSON.parse…看起来您只需要执行JSON.parse…使用JSON.parse执行一件事将retrievedData转换为Object,并删除之后应用的所有转换。然后应用相同的循环。它应该可以执行一件事conv使用JSON.parse将retrievedData插入到对象中,并删除之后应用的所有转换。然后应用相同的循环。它应该可以工作