[javascript] SyntaxError : JSON 위치 1의 예기치 않은 토큰 o

컨트롤러의 유형 클래스를 사용하여 몇 가지 데이터를 구문 분석합니다. 다음과 같이 데이터를 얻습니다.

{
   "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()입력을 문자열로 변환합니다. toString()기본적으로 JavaScript 객체 의 메서드는를 반환 [object Object]하여 관찰 된 동작을 발생시킵니다.

대신 다음을 시도하십시오.

var newData = userData.data.userList;


답변

함수의 첫 번째 매개 변수는 JSON.parse문자열이어야하고 데이터는 자바 스크립트 객체이므로 문자열로 변환되므로 데이터를 전달하기 전에 [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)


답변

글쎄, 나는 다음과 같이 객체를 구문 분석해야 함을 의미했습니다 var jsonObj = {"first name" : "fname"}. 하지만 실제로는 그렇지 않습니다. 이미 JSON이기 때문입니다.


답변

다음과 같은 검사를 추가 할 수도 있습니다.

function parseData(data) {
    if (!data) return {};
    if (typeof data === 'object') return data;
    if (typeof data === 'string') return JSON.parse(data);

    return {};
}


답변

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 형식으로 구문 분석하여 예기치 않은 ‘O’가 발생 합니다.

@Produces ({ MediaType.APPLICATION_JSON }) 제거가 제대로 작동합니다. 출력 : OK

주의 : 또한 클라이언트 측에서 ajax 요청을하고 JSON.parse ( “OK”)를 사용하면 예기치 않은 토큰 ‘O’가 발생합니다.

O 는 문자열의 첫 글자입니다.

JSON.parse (object)는 jQuery.parseJSON (object)과 비교됩니다.

JSON.parse ( ‘{ “name”: “Yergalem”, “city”: “Dover”}’); — 잘 작동