我正在解析一些数据使用类型类在我的控制器。我得到的数据如下:

{  
   "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数据或String时抛出意外的'O'错误。

如果它是字符串,它已经被字符串化了。解析最终会出现意外的“O”错误。

我面对类似的(尽管在不同的上下文中),我通过删除JSON生成器解决了以下错误。

    @POST
    @Produces({ **MediaType.APPLICATION_JSON**})
    public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
      return Response.status(200).entity("OK").build();

  }

响应包含“OK”字符串返回。 标记为@Produces({** mediattype . application_json})**的注释试图将字符串解析为JSON格式,结果出现意外的“O”。

删除@Produces({mediattype . application_json})可以正常工作。 输出:OK

请注意: 同样,在客户端,如果你发出ajax请求并使用JSON.parse("OK"),它会抛出意想不到的令牌'O'

O是字符串的第一个字母

JSON.parse(object)与jQuery.parseJSON(object)比较;

JSON。parse('{"name":"Yergalem", "city":"Dover"}');——工作正常

其他回答

当解析JSON数据或String时抛出意外的'O'错误。

如果它是字符串,它已经被字符串化了。解析最终会出现意外的“O”错误。

我面对类似的(尽管在不同的上下文中),我通过删除JSON生成器解决了以下错误。

    @POST
    @Produces({ **MediaType.APPLICATION_JSON**})
    public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
      return Response.status(200).entity("OK").build();

  }

响应包含“OK”字符串返回。 标记为@Produces({** mediattype . application_json})**的注释试图将字符串解析为JSON格式,结果出现意外的“O”。

删除@Produces({mediattype . application_json})可以正常工作。 输出:OK

请注意: 同样,在客户端,如果你发出ajax请求并使用JSON.parse("OK"),它会抛出意想不到的令牌'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 {};
}

错误的原因是对象不是字符串的形式,它是{},它应该是字符串对象('{}')

永远不要使用JSON。解析而不封装在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

你可以只检查userData和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