source

JSON.parse()가 작동하지 않습니다.

ittop 2023. 9. 4. 20:39
반응형

JSON.parse()가 작동하지 않습니다.

내 서버에서 온 아들이 있는데, -

{"canApprove": true,"hasDisplayed": false}  

나는 Json을 이렇게 구문 분석할 수 있습니다.

var msg = JSON.parse('{"canApprove": true,"hasDisplayed": false}');
alert(msg.canApprove);  //shows true.

아약스 응답 함수에서 앞서 메소드 매개 변수로 언급한 동일한 json을 포착했습니다.jsonObject-

//response function
function(jsonObject){

  //here jsonObject contains the same json -  {"canApprove":true,"hasDisplayed": false}
  //But without the surrounding single quote
  //I have confirmed about this by seeing my server side log.

  var msg = JSON.parse(jsonObject); // this gives the error

}

하지만 지금 저는 다음과 같은 오류를 얻었습니다.

구문 오류: JSON.parse: JSON 데이터의 줄 1 열 2에 예기치 않은 문자가 있습니다.

제가 왜 오류가 발생하는지 누가 알려주실 수 있나요?

JsonObject가 JsonObject인 것 같습니다.문자열에서 Json을 구문 분석할 수 없는 이유:

  • String은 다음으로 둘러싸여 있습니다." "및 사용\"안으로 도망치다다음은 예입니다.

    "{\"name\":\"alan\",\"age\":34}"

    당신이 위의 문자열을 구문 분석하려고 할 때JSON.parse()여전히 문자열을 반환합니다.{"name":"alan","age":34},그리고.\"로 대체됨"하지만 사용합니다.JSON.parse()다시 기능하면 원하는 객체가 반환됩니다.이 경우 다음과 같은 작업을 수행할 수 있습니다.

    JSON.parse(JSON.parse("{\"name\":\"alan\",\"age\":34}" ))

  • 문자열 사용'대신에"예:

    {'name':'alan','age':34}

    만약 당신이 위의 문자열을 구문 분석하려고 한다면.JSON.parse()오류를 일으킬 수 있음

저는 당신이 전화해야 한다고 생각하지 않습니다.JSON.parse(jsonObject)서버가 응답을 검색할 때 자동으로 구문 분석되므로 유효한 JSON을 보내는 경우.만약 당신이 그것을 설정한다면 나는 믿습니다.Content-type: application/json헤더는 자동으로 구문 분석됩니다.

사용해 보십시오.jsonObject이미 구문 분석된 것처럼, 다음과 같은 것:

console.log(jsonObject.canApprove);

전화 안 함JSON.parse전에.

이 답변은 JSON을 SQL 데이터베이스에 문자열로 저장하는 사용자에게 도움이 될 수 있습니다.

나는 다음의 가치를 저장하고 있었습니다.

JSON.stringify({hi:hello})

MySQL에 있습니다.SQL에 저장된 JSON은{"hi":"hello"}

문제는 내가 DB에서 이 값을 읽고 그것을 공급했을 때였습니다.JSON.parse()그것은 나에게 오류를 주었습니다.

저는 그것을 인용문으로 포장하려고 했지만 작동하지 않았습니다.

마지막으로 작업 완료

JSON.parse(JSON.stringify(jsonFromDb))

이것은 작동했고 JSON은 올바르게 구문 분석되었습니다.

저장 메커니즘이 적절하지 않을 수도 있지만 고객의 요구 사항이었습니다.

이미 개체이므로 구문 분석할 필요가 없습니다.시도하기

alert(jsonObject.canApprove)

응답 기능에 포함됩니다.

Json.parse가 문자열을 기다리고 있습니다.

당신의.jsonObject이미 구문 분석된 것 같습니다. 이 경우를 테스트해야 합니다.

function(jsonObject){
    var msg = (typeof jsonObject == "object" ? jsonObject : JSON.parse(jsonObject));
}

콜백이 비어 있을 수도 있습니다. 빈 문자열을 구문 분석하려고 해도 동일한 오류가 발생합니다.콜백 값을 테스트합니다.

function(jsonObject){
    if(jsonObject) {
       var msg = (typeof jsonObject == "object" ? jsonObject : JSON.parse(jsonObject));
    }
}
var text = '{"canApprove": true,"hasDisplayed": false}';

var parsedJSON = JSON.parse(text);

alert(parsedJSON.canApprove);

효과가 있습니다.사용할 수 있습니다."대신에'문자열을 만드는 동안.

다음은 Ajax 호출을 수행하고 결과를 구문 분석하는 방법의 예입니다.

var query = {
    sUserIds: JSON.stringify(userIds),
};

$.ajax({
    type: "POST",
    url: your-url,
    data: JSON.stringify(query),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    success: function (response) {
        var your_object = JSON.parse(response.d);
    }, 
    failure: function (msg) {
        alert(msg);
    },
    error: function (a, b, c) {

    }
});

저는 비슷한 문제에 직면했고 이제 해결되었습니다.ASP를 사용하고 있습니다..js 파일로 값을 보낼 NetMVC입니다.문제는 이 JSON.parse가 .js 파일에서 실패했기 때문에 Action 메서드에서 JsonResult를 반환하는 것이었습니다.Action 메서드의 반환 유형을 string으로 변경하여 JSON.parse가 정상적으로 작동합니다.

위에서 누군가가 언급했듯이, 이것은 실제로 문제를 해결합니다.이를 통해 알게 된 것은 PHP가 json 객체를 인코딩하는 방식이 JavaScript에 익숙하지 않을 수 있다는 것입니다.

var receivedData = data.toString()
receivedData = JSON.parse(receivedData)
console.log(receivedData.canApprove)

이것은 효과가 있을 거예요.

언급URL : https://stackoverflow.com/questions/30194562/json-parse-not-working

반응형