SyntaxError:位于第1位的JSON中的意外标记o

时间:2016-07-14 17:21:28

标签: javascript angularjs json

我使用控制器中的类型类解析了一些数据我获取的数据如下:

{  
   "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;

如何将用户列表提取到新变量?

10 个答案:

答案 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);