SyntaxError:在JSON中位置1处出现意外的令牌o

我正在解析一些数据使用类型类在我的控制器。我得到的数据如下:

{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}

我试着这样存储数据

var userData = _data;
var newData = JSON.parse(userData).data.userList;

如何提取用户列表到一个新变量?

905265 次浏览

你发布的JSON看起来很好,但是在你的代码中,它很可能不再是一个JSON字符串,而是一个JavaScript对象。这意味着不需要更多的解析。

你可以自己测试,比如在Chrome的控制台:

new Object().toString()
// "[object Object]"


JSON.parse(new Object())
// Uncaught SyntaxError: Unexpected token o in JSON at position 1


JSON.parse("[object Object]")
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse()将输入转换为字符串。JavaScript对象的toString()方法默认返回[object Object],导致所观察到的行为。

试试下面的方法吧:

var newData = userData.data.userList;

不要使用JSON.parse,除非将它包装在try-catch块中:

// payload
let userData = null;


try {
// Parse a JSON
userData = JSON.parse(payload);
} catch (e) {
// You can read e for more info
// Let's assume the error is that we already have parsed the payload
// So just return that
userData = payload;
}


// Now userData is the parsed result

当解析JSON数据或String时抛出意外的'O'错误。

如果它是字符串,它已经被字符串化了。解析最终会出现意外的“O”错误。

我面对类似的(尽管在不同的上下文中),我通过删除JSON生成器解决了以下错误。

    @POST
@Produces({ **MediaType.APPLICATION_JSON**})
public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
return Response.status(200).entity("OK").build();


}

响应包含“OK”字符串返回。 标记为与@ ({* * MediaType。APPLICATION_JSON})的注释**尝试将字符串解析为JSON格式,结果是意想不到的“O”.

移除与@({<强> MediaType.APPLICATION_JSON < / >强})工作正常。 输出:好吧

< p >注意: 此外,在客户端,如果你发出ajax请求并使用JSON.parse(“OK”),它会抛出意外令牌'O'

O是字符串的第一个字母

JSON.parse(object)与jQuery.parseJSON(object)比较;

JSON。parse('{"name":"Yergalem", "city":"Dover"}');——工作正常

JSON.parse上面,使用:

var newData = JSON.stringify(userData)

JSON.parse函数的第一个参数是一个字符串,而你的数据是一个JavaScript对象,所以它会将其强制为字符串"[object Object]"。你应该在传递数据之前使用JSON.stringify:

JSON.parse(JSON.stringify(userData))

我们还可以添加这样的检查:

function parseData(data) {
if (!data) return {};
if (typeof data === 'object') return data;
if (typeof data === 'string') return JSON.parse(data);


return {};
}

给出像这样的try catch,如果它被stringized了,它将解析它,否则将采用默认值

let example;
try {
example  = JSON.parse(data)
} catch(e) {
example = data
}

你可以简单地检查typeof userData &JSON.parse()仅当它是string时:

var userData = _data;
var newData;
if (typeof userData === 'object')
newData = userData.data.userList; // dont parse if its object
else if (typeof userData === 'string')
newData = JSON.parse(userData).data.userList; // parse if its string

第一个在变量中设置请求值:

let reqData = req.body.reqData;
if (reqData) {
let reqDataValue = JSON.parse(JSON.stringify(reqData));
}

错误的原因是Object不是字符串的形式,它是{},它应该是字符串Object('{}')