语法错误:JSON 中位置 1 处出现意外的标记 o
SyntaxError: Unexpected token o in JSON at position 1
我正在使用控制器中的类型类解析一些数据。我得到的数据如下:
{
"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;
如何将用户列表提取到新变量?
你发布的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
函数的第一个参数应该是字符串,而你的数据是一个 JavaScript 对象,所以它会将其强制到字符串"[object Object]"
。在传递数据之前,应使用JSON.stringify
:
JSON.parse(JSON.stringify(userData))
包装在块中,请不要使用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.parse
上方,使用:
var newData = JSON.stringify(userData)
我们还可以添加这样的检查:
function parseData(data) {
if (!data) return {};
if (typeof data === 'object') return data;
if (typeof data === 'string') return JSON.parse(data);
return {};
}
您可以简单地检查typeof userData
,只有在string
时才JSON.parse()
它:
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
当 JSON 数据或字符串碰巧被解析时,会引发意外的"O"错误。
如果是字符串,则它已经字符串化了。解析最终出现意外的"O"错误。
我遇到了类似的(尽管在不同的上下文中),我通过删除 JSON 生产者解决了以下错误。
@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"}'); ---工作正常
错误的原因是 Object 不是字符串的形式,它是{}
的,它应该是字符串 Object( '{}'
)
像这样尝试一下,如果字符串化,这将解析它,否则将采用默认值
let example;
try {
example = JSON.parse(data)
} catch(e) {
example = data
}
在变量中首次设置请求值,如下所示:
let reqData = req.body.reqData;
if (reqData) {
let reqDataValue = JSON.parse(JSON.stringify(reqData));
}
- GAS 单击事件处理程序导致 UI Web 应用中出现“意外错误”
- doPost”;遇到意外错误”;提交时的Web表单
- Javascript教科书中给出意外错误的示例代码
- 编写简单的代码行时发生意外错误
- 您在此页面上多次添加了谷歌地图API.这可能会导致意外错误(wordpress)
- 安装平均堆栈时出现意外错误
- 尝试运行Webpack时出现意外错误
- 注释上的双斜杠可能会产生意外错误
- Grunt build+nginx:意外错误
- 使用索引元素id时出现意外错误
- 试图设置Node.js (Express)与vhost一起工作,并获得意外错误
- Parse.Object.fetchAll抛出意外错误
- 数组参数解构抛出意外错误
- 为什么JS在重写变量时会抛出意外错误?
- 分配给变量的匿名函数出现意外错误
- 在Javascript中对数组进行排序时出现意外错误
- Babeljs为regex{m,n}量词生成意外错误
- 在angular承诺中,如何区分意外错误和计划拒绝
- log4javascript IE8 意外错误“函数出席”/“预期函数”
- 出现意外错误(type=Bad Request, status=400),缺少参数