programing

오류 "Uncatched SyntaxError:JSON.parse에 예기치 않은 토큰이 있습니다.

newsource 2023. 1. 10. 21:13

오류 "Uncatched SyntaxError:JSON.parse에 예기치 않은 토큰이 있습니다.

세 번째 줄에서 이 오류가 발생하는 원인은 무엇입니까?

var 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(products); //unexpected token o

오류를 보려면 콘솔 열기

products사물의 작성하다

JSON.parse()JSON 표기를 포함하는 문자열을 Javascript 개체로 변환하기 위해 사용합니다.

합니다(호출하면 )..toString()를 사용합니다JSON을 사용하다
" " ".toString()"[object Object]"(일본의 JSON).

유효한 JSON인 것을 알고 있지만, 아직 이 JSON을 받고 있다고 칩시다.

이 경우 문자열에 숨겨진 문자나 특수 문자가 있을 수 있습니다.검증자에 붙여넣으면 손실되지만 문자열에는 그대로 남아 있습니다.에 보이지 깨질 이다.JSON.parse().

ifsraw 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 characters
s = s.replace(/[\u0000-\u0019]+/g,"");
var o = JSON.parse(s);

구문 분석이 아니라 개체를 문자열화하려는 것 같습니다.다음 작업을 수행합니다.

JSON.stringify(products);

은 「 」입니다.JSON.parse() String 및 ""products는 입니다.Array.

" " " : " " " 를 합니다.json.parse('[object Array]')은 불평한다.o 후에[.

를 발견했어요.JSON.parse(inputString).

제 경우, 입력 문자열은 서버 페이지에서 가져옵니다(페이지 메서드의 반환).

가 인쇄를 했습니다.를 인쇄했다.typeof(inputString)가 발생했어요 - 에러가 나다.

JSON.stringify(inputString)이치노

연산자의 되었습니다.[\n]을 사용하다

교체(다른 캐릭터로 교체, 해석 후행을 다시 넣음)했더니 모든 것이 정상 작동했습니다.

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

여기서 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
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"}]';

선행 또는 후행 공백이 있으면 유효하지 않습니다.후행 및 선행 공간은 다음과 같이 제거할 수 있습니다.

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

출처: JavaScript: 문자열에서 선행 또는 후행 공백을 잘라냅니다.

여기 이전 답변을 바탕으로 만든 기능이 있습니다. 제 기계에서는 작동하지만 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 characters
  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;
}

는 른른른른 른 one른 one one one 、 른 、 one 、 one one one one one 。"SyntaxError: Unexpected token"" " 를 JSON.parse()는 문자열 값에서 다음 중 하나를 사용하고 있습니다.

  1. 줄 바꿈 문자

  2. 탭(예, 탭 키로 생성할 수 있는 탭!)

  3. 임의의 스탠드아론 슬래시\(하지만 어떤 이유에선지)/(최소한 Chrome에서는).

(전체 리스트에 대해서는, 여기를 참조해 주세요).

예를 들어 다음과 같이 하면 이 예외가 발생합니다.

{
    "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만의 포맷에서는 텍스트의 양이 많아 읽을 수 없습니다.

[
  {
    "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 콘텐츠입니다.

저의 문제는 Ajax를 통해 PHP 콜백 함수로 HTML을 코멘트하여 비활성 JSON을 반환한 것입니다.

댓글 달린 HTML을 삭제하자 모두 양호했고 JSON은 문제없이 해석되었습니다.

POST 또는 PUT 방법을 사용할 때는 반드시 신체 부위를 끈으로 묶어야 합니다.

여기 https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154에서 예를 문서화하고 있습니다.

유일한 실수는 이미 해석된 오브젝트를 해석하고 있기 때문에 에러가 발생하는 것입니다.이걸 쓰면 갈 수 있을 거예요.

var 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[0].name); // Name of item at 0th index

JSON 콘텐츠 전체를 인쇄하려면 JSON.stringify()를 사용합니다.

제품은 직접 사용할 수 있는 어레이입니다.

var i, j;

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

이제 보니\r,\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);

Chrome에서 테스트하는 중, 이 테스트에서는JSON.parse(String.fromCharCode(0x22, x, 0x22));어디에x는 34, 92, 또는0 ~ 31 입니다

문자 34와 92는"그리고.\보통 예상되고 적절하게 이스케이프됩니다.0에서 31자까지가 문제가 될 수 있습니다.

디버깅을 하기 전에JSON.parse(input)먼저 입력에 문제가 있는 문자가 포함되어 있지 않은지 확인합니다.

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;
        }
    }
}

이런, 이전의 모든 답변의 해결책은 나에게 효과가 없었다.저도 방금 비슷한 문제가 있었어요.나는 견적을 포장해서 간신히 해결했다.스크린샷을 참조해 주세요.후.

여기에 이미지 설명을 입력하십시오.

오리지널:

var 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(products); //unexpected token o

예기치 않은 토큰 o와 같은 오류가 발생하는 것은 JSON이 예상되지만 구문 분석 중에 개체를 얻었기 때문입니다.그 "o"는 단어 "object"의 첫 글자입니다.

가 있을 수 가 잘못되어 수 있기 에, 하실 수 .JSON.stringify(obj);JSON JQuery jQuery JQuery JSON.

이 경우 JSON 문자열에 다음과 같은 문자 문제가 있습니다.

  1. \r
  2. \t
  3. \r\n
  4. \n
  5. :
  6. "

다른 문자나 기호로 대체하고 다시 코딩에서 되돌렸습니다.

이것은 JSON 형식이 아닌 객체의 JavaScript 배열입니다.JSON 형식으로 변환하려면 JSON.stringify()라는 함수를 사용해야 합니다.

JSON.stringify(products)

JSON.parse가 필요하죠?이미 객체 배열 형식입니다.

다음과 같이 JSON.stringify를 사용하는 것이 좋습니다.

var b = JSON.stringify(products);

이다.nullJSON.parse()로 지정합니다.

즉, JSON의 예기치 않은 토큰n을 위치0으로 슬로우 합니다.

그러나 이것은 JSON.parse()의 JavaScript 객체가 아닌 것을 전달할 때마다 발생합니다.

eval. JavaScript 로 사용하여 JavaScript / / 드 java java java java java java java java java java java java java java java java java java java java java java java java java java java.

eval(inputString);

언급URL : https://stackoverflow.com/questions/14432165/error-uncaught-syntaxerror-unexpected-token-with-json-parse