簡體   English   中英

語法錯誤:JSON 中的意外標記 o 在 position 1

[英]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 userDataJSON.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM