Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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 nodejson解析问题_Javascript_Json_Node.js_Npm - Fatal编程技术网

Javascript nodejson解析问题

Javascript nodejson解析问题,javascript,json,node.js,npm,Javascript,Json,Node.js,Npm,我有一个.json文件,其中存储了人们的姓名。我使用节点管理器中的文件系统从这个文件中读取内容,然后尝试将这个json转换为字符串,并将其解析为JS对象。将其解析为JS对象后,我得到的是类型字符串,而不是对象。 以下是示例json文件: { "21154535154122752": { "username": "Stanislav", "discriminator": "0001", "id": "21154535154122752", "avatar": "04

我有一个.json文件,其中存储了人们的姓名。我使用节点管理器中的文件系统从这个文件中读取内容,然后尝试将这个json转换为字符串,并将其解析为JS对象。将其解析为JS对象后,我得到的是类型字符串,而不是对象。 以下是示例json文件:

{
"21154535154122752": {
    "username": "Stanislav",
    "discriminator": "0001",
    "id": "21154535154122752",
    "avatar": "043bc3d9f7c2655ea2e3bf029b19fa5f",
    "shared_servers": [
        "Reactiflux",
        "Discord Testers",
        "Official Fortnite",
        "Discord API"
    ]
    }
}
下面是处理数据的代码:

const string_data = JSON.stringify(fs.readFileSync('data/users.json', 'utf8'));
const data = JSON.parse(string_data);
console.log(typeof(data)); // <-- this line here shows the type of data as string
const results_array   = Object.values(data);
conststring\u data=JSON.stringify(fs.readFileSync('data/users.JSON','utf8');
const data=JSON.parse(字符串数据);

console.log(类型(数据));// 好的,那么fs.readFileSync将返回一个字符串,这样您就不需要使用stringify了

var fs = require('fs');
var read = fs.readFileSync('data/users.json', 'utf8');
console.log(read);
console.log(typeof(read));
const data = JSON.parse(read);
console.log(typeof(data));

您将看到它返回一个对象

不要使用
JSON.stringify
,因为它将进一步更改JSON对象的字符串表示形式。下面是正在发生的事情的一个例子

想象一下,如果文件中有如下所示的数据

{
   "key": "value"
}
当您读取文件(使用
readFileSync
)并应用
JSON.stringify
时,它将转换为一个新字符串,如下所示。您可以注意到双引号现在已转义

"{\"key\": \"value\"}"
现在,当您将使用
JSON.parse
解析它时,您将得到与从文件中读取的字符串相同的字符串,而不是所需的
对象

您基本上是先执行然后撤消stringify操作

这对我很有用:

const data = JSON.parse(fs.readFileSync('data/users.json', 'utf8'));
console.log(typeof(data)); // <-- this line here shows the type of data as OBJECT
const results_array   = Object.values(data);
const data=JSON.parse(fs.readFileSync('data/users.JSON','utf8');

console.log(类型(数据));//我也尝试了所有这些方法,但由于未知的原因,我仍然得到了类型字符串。我建议在每个语句之后执行console.log()并查看其格式,这样更容易理解哪里出了问题,哪里出了问题。还要将fs.readFileSync分配给一个变量,然后重用它。它的可读性更强。只需使用
require('./data/users.json')
。我不知道,但我得到了未定义的错误:1'{'SyntaxError:JSON中的意外标记位于位置0只是为了确保您有一个名为data的文件夹,并且里面有users.JSON,对吗?它仍然存在相同的问题@AmirHosseinRdI立即获取它,但当我使用其他方法时,我会得到以下错误:未定义:1'{'SyntaxError:JSON中的意外标记位于位置0您可以使用
console.info
打印从
readFileSync
收到的字符串并检查其是否正确吗?是的,一切看起来都很好。但无法消除此错误。当我在控制台打印字符串时,我没有收到结尾带有引号的字符串,这是我所需要的吗应该担心@S4beR吗?我想你看到的是类似于{“key”:“value”}的东西?这个表示很好,我真的不知道我做错了什么,可能是json构造得不好。