복붙노트

[JQUERY] catch되지 않은 구문 에러 : JSON.parse 예기치 않은 토큰

JQUERY

catch되지 않은 구문 에러 : JSON.parse 예기치 않은 토큰

해결법


  1. 1.제품은 개체입니다. (오브젝트 리터럴에서 생성)

    제품은 개체입니다. (오브젝트 리터럴에서 생성)

    JSON.parse ()는 자바 스크립트 객체로 JSON 표기법을 포함하는 문자열을 변환하는 데 사용됩니다.

    귀하의 코드는 객체를 스트링으로 변합니다 (로 .toString ()를 호출하여) JSON 텍스트로 해석하려고하기 위해서이다. 유효한 JSON 아닌 디폴트로 .toString () 반환 "[개체 개체]"; 따라서 오류.


  2. 2.하자 당신이 그것의 유효 JSON하지만 여전히이 점점 알고 말 ...

    하자 당신이 그것의 유효 JSON하지만 여전히이 점점 알고 말 ...

    이 경우 그것은 당신이 그들을 받고 어떤 소스에서 가능성이 문자열이 숨겨져 있음 / 특수 문자입니다. 당신이 발리에 붙여 넣을 때, 그들은이 손실됩니다 -하지만 문자열에 그들은 여전히 ​​있습니다. 그 문자, 눈에 보이지 않는 반면, JSON.parse을 깰 것 ()

    의 당신의 원료 JSON의 경우, 그것을 함께 정리 :

    // preserve newlines, etc - use valid JSON
    s = s.replace(/\\n/g, "\\n")  
                   .replace(/\\'/g, "\\'")
                   .replace(/\\"/g, '\\"')
                   .replace(/\\&/g, "\\&")
                   .replace(/\\r/g, "\\r")
                   .replace(/\\t/g, "\\t")
                   .replace(/\\b/g, "\\b")
                   .replace(/\\f/g, "\\f");
    // remove non-printable and other non-valid JSON chars
    s = s.replace(/[\u0000-\u0019]+/g,""); 
    var o = JSON.parse(s);
    

  3. 3.당신이 객체를 캐릭터 라인 화 할 것 같다. 그래서이 작업을 수행 :

    당신이 객체를 캐릭터 라인 화 할 것 같다. 그래서이 작업을 수행 :

    JSON.stringify(products);
    

    오류의 원인은 JSON.parse ()가 문자열 값을 기대하고 제품을 배열 것입니다.

    참고 : 나는 json.parse 시도 생각 ( '[객체 배열])는 [후 토큰 O를 기대하지 않았다 뿌려줍니다.


  4. 4.나는 JSON.parse (inputString)과 같은 문제를 발견했다.

    나는 JSON.parse (inputString)과 같은 문제를 발견했다.

    내 경우에는 입력 문자열 내 서버 페이지에서오고있다 [페이지 방식의 반환].

    나는 대해서 typeof (inputString)를 인쇄 - 그것은 문자열이고, 여전히 오류가 발생합니다.

    또한 JSON.stringify (inputString)했지만, 그것은 도움이되지 않았다.

    나중에는 I 필드 값 안에서 새 광고 연산자 [\ n]의 문제가이 발견했다.

    나는 대체 않았다 [다른 문자로, 구문 분석 한 후 새로운 라인 등을 넣어] 모든 것이 잘 작동한다.


  5. 5.JSON.parse는 매개 변수에 문자열을 기다리고 있습니다. 당신은 문제를 해결하기 위해 당신의 JSON 객체를 캐릭터 라인 화해야합니다.

    JSON.parse는 매개 변수에 문자열을 기다리고 있습니다. 당신은 문제를 해결하기 위해 당신의 JSON 객체를 캐릭터 라인 화해야합니다.

    products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];
    console.log(products);
    var b = JSON.parse(JSON.stringify(products));  //solves the problem
    

  6. 6.당신은 여기 JSON 문자열을 확인해야합니다.

    당신은 여기 JSON 문자열을 확인해야합니다.

    유효한 JSON 문자열은 키 큰 따옴표가 있어야합니다 :

    JSON.parse({"u1":1000,"u2":1100})       // will be ok
    

    따옴표가없는 경우 오류가 발생합니다 :

    JSON.parse({u1:1000,u2:1100})    
    // error Uncaught SyntaxError: Unexpected token u in JSON at position 2
    

    작은 따옴표를 사용하면 오류가 발생합니다 :

    JSON.parse({'u1':1000,'u2':1100})    
    // error Uncaught SyntaxError: Unexpected token ' in JSON at position 1
    

  7. 7.

    products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];
    

    로 변경

    products = '[{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}]';
    

  8. 8.선행 또는 후행 공백이있는 경우, 그것은 잘못된 수 있습니다. 후행 / 선행 공백과 같이 제거 할 수 있습니다

    선행 또는 후행 공백이있는 경우, 그것은 잘못된 수 있습니다. 후행 / 선행 공백과 같이 제거 할 수 있습니다

    mystring = mystring.replace(/^\s+|\s+$/g, "");
    

    출처 : http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html


  9. 9.

    [
      {
        "name": "Pizza",
        "price": "10",
        "quantity": "7"
      },
      {
        "name": "Cerveja",
        "price": "12",
        "quantity": "5"
      },
      {
        "name": "Hamburguer",
        "price": "10",
        "quantity": "2"
      },
      {
        "name": "Fraldas",
        "price": "6",
        "quantity": "2"
      }
    ]
    

    다음은 구문 분석 할 수있는 완벽한 JSON이다.


  10. 10.여기에 내가 이전의 응답을 기반으로 만든 기능이다 : 그것은 내 컴퓨터하지만 YMMV에서 작동합니다.

    여기에 내가 이전의 응답을 기반으로 만든 기능이다 : 그것은 내 컴퓨터하지만 YMMV에서 작동합니다.

              /**
                 * @description Converts a string response to an array of objects.
                 * @param {string} string - The string you want to convert.
                 * @returns {array} - an array of objects.
                */
                function stringToJson(input) {
                  var result = [];
    
                  //replace leading and trailing [], if present
                  input = input.replace(/^\[/,'');
                  input = input.replace(/\]$/,'');
    
                  //change the delimiter to 
                  input = input.replace(/},{/g,'};;;{');
    
                  // preserve newlines, etc - use valid JSON
                  //https://stackoverflow.com/questions/14432165/uncaught-syntaxerror-unexpected-token-with-json-parse
                input = input.replace(/\\n/g, "\\n")  
                .replace(/\\'/g, "\\'")
                .replace(/\\"/g, '\\"')
                .replace(/\\&/g, "\\&")
                .replace(/\\r/g, "\\r")
                .replace(/\\t/g, "\\t")
                .replace(/\\b/g, "\\b")
                .replace(/\\f/g, "\\f");
                // remove non-printable and other non-valid JSON chars
                input = input.replace(/[\u0000-\u0019]+/g,""); 
    
                  input = input.split(';;;');
    
                  input.forEach(function(element) {
                    // console.log(JSON.stringify(element));
    
                    result.push(JSON.parse(element));
                  }, this);
    
                  return result;
                }
    

  11. 11."구문 에러 : 예기치 않은 토큰"될 수있는 한 다른 잡았다 예외를 JSON.parse를 (호출 할 때)는 문자열 값에서 다음 중 하나를 사용하고 있습니다 :

    "구문 에러 : 예기치 않은 토큰"될 수있는 한 다른 잡았다 예외를 JSON.parse를 (호출 할 때)는 문자열 값에서 다음 중 하나를 사용하고 있습니다 :

    (전체 목록은 여기에 문자열 섹션을 참조하십시오.)

    예를 들어 다음 당신이 예외를 얻을 것이다 :

    {
        "msg" : {
            "message": "It cannot
    contain a new-line",
            "description": "Some discription with a     tabbed space is also bad",
            "value": "It cannot have 3\4 un-escaped"
        }
    }
    

    그래서이 변경되어야합니다

    {
        "msg" : {
            "message": "It cannot\ncontain a new-line",
            "description": "Some discription with a\t\ttabbed space",
            "value": "It cannot have 3\\4 un-escaped"
        }
    }
    

    어느, 내가 말을해야, 텍스트의 큰 양 JSON 전용 형식으로 꽤 읽을 수 있습니다.


  12. 12.당신이 POST 나 PUT 메소드를 사용하는 경우, 본문 부분 캐릭터 라인 화해야합니다.

    당신이 POST 나 PUT 메소드를 사용하는 경우, 본문 부분 캐릭터 라인 화해야합니다.

    여기 예를 문서화 https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154


  13. 13.희망이 다른 사람 도움이됩니다.

    희망이 다른 사람 도움이됩니다.

    내 문제는 내가 코멘트를 분석하고 잘못된 JSON을 반환 된 AJAX를 통해 PHP 콜백 함수에 HTML을 주석 한 것이 었습니다.

    내가 주석 HTML을 제거하면, 모든 좋은이었고, JSON은 문제없이 구문 분석했다.


  14. 14.당신이하고있는 유일한 실수는 당신이 오류를 던지고, 그래서 이것을 사용하고 갈 좋은 것 이미 구문 분석 개체를 구문 분석하는 것이다.

    당신이하고있는 유일한 실수는 당신이 오류를 던지고, 그래서 이것을 사용하고 갈 좋은 것 이미 구문 분석 개체를 구문 분석하는 것이다.

    var에 제품 = [{ "이름": "피자" "가격": "10", "수량": "7" }, { "이름": "Cerveja" "가격": "12", "수량": "5" }, { "이름": "Hamburguer" "가격": "10", "수량": "2" }, { "이름": "Fraldas" "가격": "6", "수량": "2" }]; CONSOLE.LOG (제품 [0] .name을); // 0 번째 인덱스에있는 항목의 이름

    당신은 전체 JSON을 인쇄하려면 다음) (JSON.stringify를 사용


  15. 15.제품에 직접 사용될 수있는 배열이다 :

    제품에 직접 사용될 수있는 배열이다 :

    var i, j;
    
    for(i=0;i<products.length;i++)
      for(j in products[i])
        console.log("property name: " + j,"value: "+products[i][j]);
    

  16. 16.이제 등을 분명히 \ 연구, \ B, \ t, \ f를, 당신이 오류를 줄 수있는 유일한 문제가 문자가 없습니다.

    이제 등을 분명히 \ 연구, \ B, \ t, \ f를, 당신이 오류를 줄 수있는 유일한 문제가 문자가 없습니다.

    일부 브라우저 JSON.parse의 입력을위한 추가 요구 사항이있을 수 있습니다.

    브라우저에서이 테스트 코드를 실행합니다 :

    var arr = [];
    for(var x=0; x < 0xffff; ++x){
        try{
            JSON.parse(String.fromCharCode(0x22, x, 0x22));
        }catch(e){
            arr.push(x);
        }
    }
    console.log(arr);
    

    크롬에서 테스트, 나는 JSON.parse (대신 String.fromCharCode (0x22, 배, 0x22))를 허용하지 않는 것을 볼; X는 34, 92, 또는 0-31이다.

    문자 (34) 및 (92)는 각각 "및 \ 문자이며, 그들은 일반적으로 탈출 제대로 예상된다. 당신에게 문제를 줄 것 그것의 문자 0 ~ 31.

    당신이 JSON.parse (입력) 전에 디버깅을 돕기 위해, 먼저 입력이 문제가 문자를 포함하지 않는 것을 확인하십시오

    function VerifyInput(input){
        for(var x=0; x<input.length; ++x){
            let c = input.charCodeAt(x);
            if(c >= 0 && c <= 31){
                throw 'problematic character found at position ' + x;
            }
        }
    }
    

  17. 17.왜 JSON.parse이 필요하십니까? 그것은 개체 형식의 배열에 이미.

    왜 JSON.parse이 필요하십니까? 그것은 개체 형식의 배열에 이미.

    아래로 더 나은 사용 JSON.stringify : VAR의 B = JSON.stringify (제품);

    이것은 당신을 도움이 될 수 있습니다.


  18. 18.오 이런, 지금까지 제공하는 모든 위의 답변의 솔루션은 나를 위해 작동하지 않았다. 난 그냥 지금 비슷한 문제가 있었다. 나는 견적 포장로를 해결하기 위해 관리. 스크린 샷을 참조하십시오. 우.

    오 이런, 지금까지 제공하는 모든 위의 답변의 솔루션은 나를 위해 작동하지 않았다. 난 그냥 지금 비슷한 문제가 있었다. 나는 견적 포장로를 해결하기 위해 관리. 스크린 샷을 참조하십시오. 우.

    실물: var에 제품 = [{ "이름": "피자" "가격": "10", "수량": "7" }, { "이름": "Cerveja" "가격": "12", "수량": "5" }, { "이름": "Hamburguer" "가격": "10", "수량": "2" }, { "이름": "Fraldas" "가격": "6", "수량": "2" }]; CONSOLE.LOG (제품); VAR의 B = JSON.parse (제품); // 예기치 않은 토큰 오


  19. 19.JSON이 예상 되나 구문 분석하는 동안 객체를 얻을 수 있기 때문에 당신은 "예기치 않은 토큰 (을)를"즉을 받고 오류입니다. 즉, "O"는 "개체"단어의 첫 글자입니다.

    JSON이 예상 되나 구문 분석하는 동안 객체를 얻을 수 있기 때문에 당신은 "예기치 않은 토큰 (을)를"즉을 받고 오류입니다. 즉, "O"는 "개체"단어의 첫 글자입니다.


  20. 20.당신이 JSON.stringify (OBJ)를 사용할 수 있도록,하지만 아마도 잘못된 문자를 들면, 많은 이유에 대해 발생할 수 있습니다; 그는 JSON으로 개체를 설정하지만이 JQUERY 표현임을 기억합니다.

    당신이 JSON.stringify (OBJ)를 사용할 수 있도록,하지만 아마도 잘못된 문자를 들면, 많은 이유에 대해 발생할 수 있습니다; 그는 JSON으로 개체를 설정하지만이 JQUERY 표현임을 기억합니다.


  21. 21.이 오류를 가지고 있기 때문에 JSON 개체가 오류를 (PHP 코드가 실패 할 때 내 경우 코드 점화에있는 HTML을 반환) IT가 아닌 JSON 객체의 있도록주고 있었다 반환 된 API.

    이 오류를 가지고 있기 때문에 JSON 개체가 오류를 (PHP 코드가 실패 할 때 내 경우 코드 점화에있는 HTML을 반환) IT가 아닌 JSON 객체의 있도록주고 있었다 반환 된 API.

    는 SQL 문장과 PHP 코드를 확인하고, 우편 배달부 (또는 다른 API 테스터)와 테스트


  22. 22.내가 뭐하고 있었 실수가 JSON.parse에 널 (무의식적으로)를 통과했다 ().

    내가 뭐하고 있었 실수가 JSON.parse에 널 (무의식적으로)를 통과했다 ().

    그래서 위치 0에서 JSON에 예기치 않은 토큰 N을 던졌다


  23. 23.이 코드를 확인하십시오. 그것은 당신에게 JSON 구문 분석 오류의 맑은 용액을 제공합니다. 그것은 일반적으로 줄 바꿈 및 JSON 키 시작과 JSON 키 끝 사이의 공간에 의해 발생

    이 코드를 확인하십시오. 그것은 당신에게 JSON 구문 분석 오류의 맑은 용액을 제공합니다. 그것은 일반적으로 줄 바꿈 및 JSON 키 시작과 JSON 키 끝 사이의 공간에 의해 발생

    data_val = data_val.replace(/[\n\s]{1,}\"/g, "\"")  
                   .replace(/\"[\n\s]{1,}/g, "\"")  
                   .replace(/[\n]/g, "\\n") 
    

  24. 24.사용 평가. 그것은 문자열과 평가하여 / 실행하는 그것으로 JavaScript 표현식 / 코드를합니다.

    사용 평가. 그것은 문자열과 평가하여 / 실행하는 그것으로 JavaScript 표현식 / 코드를합니다.

    eval(inputString);
    
  25. from https://stackoverflow.com/questions/14432165/uncaught-syntaxerror-unexpected-token-with-json-parse by cc-by-sa and MIT license