[英]SyntaxError: Unexpected token o in JSON at position 1
我正在使用 controller 中的 class 類型解析一些數據。 我得到的數據如下:
{
"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)
當 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();
}
響應包含“OK”字符串返回。 標記為@Produces({ **MediaType.APPLICATION_JSON })** 的注釋嘗試將字符串解析為 JSON 格式,這會導致Unexpected 'O' 。
刪除@Produces({ MediaType.APPLICATION_JSON })工作正常。 輸出:好的
注意:另外,在客戶端,如果您發出 ajax 請求並使用 JSON.parse("OK"),它會拋出 Unexpected token 'O'
O是字符串的第一個字母
JSON.parse(object) 與 jQuery.parseJSON(object) 比較;
JSON.parse('{ "name":"Yergalem", "city":"Dover"}'); - - 工作正常
我們還可以添加這樣的檢查:
function parseData(data) {
if (!data) return {};
if (typeof data === 'object') return data;
if (typeof data === 'string') return JSON.parse(data);
return {};
}
您可以簡單地檢查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
好吧,我的意思是我需要像這樣解析對象: var jsonObj = {"first name" : "fname"}
。 但是,我實際上沒有。 因為它已經是一個 JSON。
像這樣嘗試捕獲,如果它的字符串化,這將解析它,否則將采用默認值
let example;
try {
example = JSON.parse(data)
} catch(e) {
example = data
}
首先在變量中設置請求值,例如
讓 reqData = req.body.reqData;
如果(請求數據){
let reqDataValue = JSON.parse(JSON.stringify(reqData)); }
錯誤原因是 Object 不是字符串形式,是{}
,應該是字符串 Object( '{}'
)
var data = JSON.parse(userData); 控制台日志(數據);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.