我使用控制器中的类型类解析了一些数据我获取的数据如下:
{
"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;
如何将用户列表提取到新变量?
答案 0 :(得分:55)
您发布的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;
答案 1 :(得分:15)
在JSON.parse
之上,请使用:
var newData = JSON.stringify(userData)
答案 2 :(得分:12)
函数JSON.parse
的第一个参数应该是一个String,而你的数据是一个JavaScript对象,因此它将转换为一个字符串[object object]
,你应该在传递之前使用JSON.stringify
数据
JSON.parse(JSON.stringify(userData))
答案 3 :(得分:10)
如果没有将JSON.parse
包裹在try-catch
块中,请不要使用{<1}}
// payload
let userData = null;
try {
userDate = 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
答案 4 :(得分:2)
嗯,我的意思是我需要像这样解析对象:df %>%
select(matches(paste(c("date", outer(FindLocation,
FindSensor, paste, sep=".")), collapse="|")))
。但是,我实际上并非如此。因为它已经是JSON了。
答案 5 :(得分:2)
只有当它是 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
答案 6 :(得分:1)
我们还可以添加如下检查:
function parseData(data) {
if (!data) return {};
if (typeof data === 'object') return data;
if (typeof data === 'string') return JSON.parse(data);
return {};
}
答案 7 :(得分:0)
当JSON数据或字符串恰好被解析时,会引发意外的“O”错误。
如果是字符串,它已经被字符串化了。解析最终会出现意外的“O”错误。
我遇到了类似的问题(虽然在不同的上下文中),我通过删除JSON Producer解决了以下错误。
@POST
@Produces({ **MediaType.APPLICATION_JSON**})
public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
return Response.status(200).entity("OK").build();
}
响应包含“确定”字符串返回。 标记为 @Produces({** MediaType.APPLICATION_JSON })的注释**尝试将字符串解析为JSON格式,从而导致意外的'O'。
删除 @Produces({ MediaType.APPLICATION_JSON })正常工作。 输出:确定
请注意: 此外,在客户端,如果您发出ajax请求并使用JSON.parse(“OK”),它会抛出意外的标记“O”
O 是字符串的第一个字母
JSON.parse(object)与jQuery.parseJSON(object);
进行比较JSON.parse('{“name”:“Yergalem”,“city”:“Dover”}'); ---工作正常
答案 8 :(得分:0)
给出这样的try catch,如果字符串化了,它将解析它,否则将采用默认值
let example;
try {
example = JSON.parse(data)
} catch(e) {
example = data
}
答案 9 :(得分:-1)
var data = JSON.parse(userData); console.log(data);