CNode

json串转Object问题

问答
Iim-here发布于10 年前最后回复10 年前18 回复5286 浏览0 收藏

先上代码 test.json内容

{"id":123,"name":"name"}

test.js

var fs = require('fs');
function Test() {}
module.exports = Test;
Test.fun = function() {
    fs.readFile("./json/test.json", 'utf8', function(err, val) {
        console.log(val);//这里输出内容为{"id":123,"name":"name"}
        //JSON.parse(val);//这里直接报错 SyntaxError: Unexpected token
        var temp = '{"id":123,"name":"name"}';
        temp = JSON.parse(temp);//这里没问题
        console.log(temp.id);
    });
};

同样的json串,为什么我从文件里读出来就不能JSON.parse()了呢? eval也不行。

查看回复

回复 (18)

N
ncuzp#1·10 年前

typeof Val 看看类型是不是字符串

J
jiurihuahuo#2·10 年前

这是文件系统,文件流是个Buffer,不能用JSON.parse()解析的

E
elrrrrrrr#3·10 年前
val = val.toString()
I
im-here#4·10 年前
引用 jiurihuahuo这是文件系统,文件流是个Buffer,不能用JSON.parse()解析的

@jiurihuahuo 读的时候 加了utf8参数,得到的val已经是字符串了 不是buffer

I
im-here#5·10 年前
引用 elrrrrrrr

@elrrrrrrr 已经是字符串了。

I
im-here#6·10 年前
引用 ncuzptypeof Val 看看类型是不是字符串

@ncuzp 看了下,是字符串。

K
klesh#7·10 年前

json文件可直接require

来自酷炫的 CNodeMD

I
im-here#8·10 年前
引用 kleshjson文件可直接require 来自酷炫的 CNodeMD

@klesh 嗯,这个我知道。 但是我想不明白为什么通过fs读出来的就不能JSON.parse()了呢

C
coordcn#9·10 年前
引用 im-here@klesh 嗯,这个我知道。 但是我想不明白为什么通过fs读出来的就不能JSON.parse()了呢

@imhered

可能是符号什么的打错了,打成全角字符了。仔细检查一遍,我用你的代码没问题。

I
im-here#10·10 年前
引用 coordcn@imhered 可能是符号什么的打错了,打成全角字符了。仔细检查一遍,我用你的代码没问题。

@coordcn 符号没问题,确认过了。 你 JSON.parse(val) 这个一行代码能通过?

C
coordcn#11·10 年前
引用 im-here@coordcn 符号没问题,确认过了。 你 JSON.parse(val) 这个一行代码能通过?

@imhered

是不是在windows底下?如果是的话看看是不是存成utf-8带bom格式了。

S
shynome#12·10 年前

是buffer不是string,输出的话可能console.log进行toString()操作 buffer属于对象当然不能JSON.parse了

I
im-here#13·10 年前
引用 coordcn@imhered 是不是在windows底下?如果是的话看看是不是存成utf 8带bom格式了。

@coordcn 确实是在windows下,我把第一次console.log(val)这里输出的结果直接在浏览器控制台里 JSON.pars()也报错。应该就是windows的原因了。 但是我直接把整个脚本在linux里也报错呢。

I
im-here#14·10 年前
引用 shynome是buffer不是string,输出的话可能console.log进行toString()操作 buffer属于对象当然不能JSON.parse了

@shynome 不是buffer啊,我读的时候已经加了utf8了,而且第一个console.log(val)这里输出的已经是正确的json串了,不是buffer,看我代码注释。

E
elrrrrrrr#15·10 年前

@imhered 本地重试了一下ok, 那 json 文件是 utf-8 编码的吗? test.json 改成了 gbk 编码,console.log 输出正常,parse 报错 untitled1.png

I
im-here#16·10 年前
引用 elrrrrrrr@imhered 本地重试了一下ok, 那 json 文件是 utf 8 编码的吗? test.json 改成了 gbk 编码,console.log 输出正常,parse 报错

@elrrrrrrr 刚测了下,文件格式是utf8就不能parse,我改成ansi读出来就能parse了,看样子是编码问题了。

I
im-here#18·10 年前
引用 coordcn@imhered 基本可以肯定是存成utf 8带bom格式了。

@coordcn 嗯,刚测了下,在第一次输出结果 { 这个前面移动了下光标,确实有东西。

参与回复
登录后即可参与回复。登录