컨트롤러의 유형 클래스를 사용하여 몇 가지 데이터를 구문 분석합니다. 다음과 같이 데이터를 얻습니다.
{
"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”}’); — 잘 작동