2016-07-14 42 views
9

我解析使用類型類在我的控制器我得到的數據如下幾個數據:語法錯誤:在JSON意外標記Ø在位置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; 

如何將用戶列表提取到新變量?

+0

您可能不需要使用'JSON.parse'。嘗試直接使用'userData'作爲對象。 –

+1

如果'console.log(typeof userData)'顯示'object',那麼你已經有了一個javascript對象,而不是你需要解析的JSON字符串。 –

+0

@MohitBhardwaj是的,不需要解析.. –

回答

18

您發佈的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

那麼它適用於各種瀏覽器? – comeOnGetIt

+0

@Timo你可以看看這個鏈接。 –

3

千萬不要使用JSON.parse沒有包裝它try-catch塊:

// 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 
+3

這實際上並沒有回答這個問題,而是對缺少異常處理的評論。 –

-1

意外 'O' 的錯誤被拋出時,JSON數據或字符串恰好被解析。

如果它是字符串,則它已經過齊。解析結果出現意外的'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格式,導致出現意外'O'

刪除@Produces({MediaType.APPLICATION_JSON})工作正常。 輸出:OK

當心: 此外,在客戶端,如果你讓Ajax請求,並使用JSON.parse( 「OK」),它拋出意外令牌 'O'

Ø是字符串的第一個字母

JSON.parse(object)與jQuery.parseJSON(object)進行比較;

JSON。parse('{「name」:「Yergalem」,「city」:「Dover」}'); ---工作正常

0

正上方JSON.parse,用途:

var newData = JSON.stringify(userData) 
+0

這工作,但爲什麼? – Rick

+0

'JSON.stringify()'將JavaScript對象轉換爲它的字符串表示形式,這與'JSON.parse()'的作用相反。你正在得到'SyntaxError',因爲你試圖解析已經是對象的東西。在@ Sukhchain的解決方案中,它被轉換爲一個字符串以避免這種情況。 – Hubert

+0

不利的一點是,最後你會過多地使用'JSON.parse()'。儘管這是一個非常快的過程,但解析JSON是同步完成的,可能會阻止您的用戶界面,所以我建議不要使用它。相反,你可以檢查你的變量是否是一個對象,例如在嘗試解析它之前使用'typeof(userData)==='object''。 – Hubert

0

嗯,我的意思是我需要解析的對象是這樣的:var jsonObj = {"first name" : "fname"}。但是,我不完全。因爲它已經是json。

相關問題