잡히지 않은 구문 오류 예기치 않은 토큰 U JSON


293

크롬에서 페이지를 실행할 때이 오류 "발견되지 않은 구문 오류 예기치 않은 토큰 U"가 표시됩니다. 그리고 파이어 폭스에서 "JSON.parse : 예기치 않은 문자"를 얻습니다. PHP 파일에서 json 데이터를 반환하고 반환 json 문자열이 유효합니다. http://jsonlint.com/에서 확인했습니다 . 도움을 주시면 감사하겠습니다.

반환 된 JSON 문자열은 다음과 같습니다.

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]

JSON을 게시 할 수 있습니까? 이 오류가 발생하면 일반적으로 종료되지 않은 문자열이 있음을 나타냅니다 .JSON에서 문자 'U'에 있음을 나타냅니다.
Kyle Burton

\"출력에서 이상한 문제가 될 수 있습니다 .
Felix Kling

그 JSON은 잘 파싱됩니다. 코드가 실제로 질식하고있는 것을 알아 내야합니다.
nneonneo

답변:


646

이 오류는 일반적으로 주어진 값 JSON.parse이 실제로 일 때 나타납니다 undefined. 따라서이 구문 분석하려고하는 코드를 확인합니다. 대부분 여기에 표시된 실제 문자열을 구문 분석하지 않을 가능성이 큽니다.


27
"undefined"리터럴 대신 문자열 일 수도 있습니다 undefined. 나는 그것을 알아내는 데 30 분을 보냈다.
ug_

13
@ ns47731 사실 동일합니다. 실제 정의되지 않은이 될 이유는 u, 즉 undefined(문자열 JSON.parse이 무엇을 기대하고 있기 때문에) 문자열로 강제된다.
Sean Kinsey 2012

10
어, 비동기 요청을 보내고 즉시 정의되지 않은 리턴을 구문 분석하려고했습니다. 나 자신에게 혐오감. 감사합니다.
Chris Trudeau

7
이 오류는 json 문자열의 시작 부분에서 UTF-8 { "을 통해 발생합니다
metamagikum

1
내 오류 였고 Unexpected token N in JSON at position...문제 는 다음 과 double같습니다.NaN
Jaider

14

MVC 프로젝트에서 유효성을 검사하는 동안이 메시지가 나타납니다. 나를 위해 ValidationMessageFor 요소를 추가 하면 문제가 해결되었습니다.

정확히 말해 jquery.validate.unobtrusive.js의 43 번 줄이 문제를 일으켰습니다.

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;

이것은 나를 올바른 길로 안내했다. 내 경우에는 $("form :input").valid();유효성 검사를 시작 하려고 했습니다. 그러나 ValidationMessageFor가없는 숨겨진 필드에서 오류가 발생했습니다. $("form :input:visible").valid();
Trax72

7

JSON.parse의 매개 변수는 아무것도 리턴하지 않을 수 있습니다 (예 : JSON.parse에 제공된 값은 undefined)!

xyz.sol 파일에서 Compiled solidity 코드를 구문 분석하는 동안 발생했습니다.

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

철자가 틀렸다

JSON.parse(xyz.intereface)

아무것도 반환하지 않았다!


5

이 오류가 발생하는 가장 일반적인 경우는 컨트롤을 생성 한 다음 방법을 변경 id하거나 name기본 템플릿을 '재정의'하여 템플릿을 생성하는 템플릿을 사용하는 것입니다.

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

다음으로 변경 ValidationMessageFor하는 것을 잊고

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

이것이 시간을 절약하기를 바랍니다.


3

for 루프 내 JSONArray에서 찾기 조건을 실행할 때이 오류가 발생했습니다. 내가 직면 한 문제는 for 루프에서 null을 반환하는 값 중 하나의 결과였습니다. 따라서 속성에 액세스하려고 시도했지만 실패했습니다.

따라서 JSONArrays에서 데이터 소스와 무결성을 확신하지 못하는 작업을 수행하는 경우이 경우 null 및 정의되지 않은 예외를 처리하는 것이 좋습니다.

JSONArray에서 find의 반환 값에서 null을 확인하고 예외를 적절하게 처리하여 문제를 해결했습니다.

이것이 도움이 될 것이라고 생각했습니다.


1

필자의 경우 XHRResponse가 돌아 오기 전에 AJAX 변수에서 JSON.parse ()를 호출하려고했습니다. EG :

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

$ .get에 대한 jQuery 사이트 의 예제로 대체했습니다 .

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>

1

당신이 이해하지 못한 경우를 대비하여

예를 들어 JSON 문자열이 있다고 가정 해 봅시다 .. 아직 JSON 객체 또는 배열이 아닙니다.

따라서 자바 스크립트에서 문자열을 다음과 같이 구문 분석하면

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

위의 큰 답변


1

파일 업로드 작업을하는 동안이 오류가 발생하는 사람들을위한 대답입니다 .

토큰 기반 암호화-암호 해독에 미들웨어를 사용하고 있으며 동일한 오류가 발생했습니다.

다음은 경로 파일의 코드입니다.

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

여기서 우리는 업로드 기능 전에 미들웨어를 호출하고 있었고 그로 인해 오류가 발생했습니다. 우리가 이것을 바꾸었을 때 효과가있었습니다.

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

0

이것은 어려운 일이 아닙니다. 이 문제는 내 사이트에서도 발생하며 js 파일을 최상위 순서로 이동해야합니다. JSON 구문 분석을 사용하는 위치에서 이번에는 JS 파일이로드되지 않습니다. 예 #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

로 변경

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>

0

글쎄, 실제로 코드의 어느 곳에서나 오류를 찾을 수없는 모든 사람들에게 "로컬 저장소 또는 null에서 정의되지 않은 것처럼"도 아닙니다. 코드를 주석 처리하고 실제로 로컬 저장소에서 항목을 제거하는 다른 코드를 작성하십시오. 그 후, u는 현재 코드에 주석을 달거나 삭제하고 간단히 주석 처리를 제거하여 이전 코드를 다시 재설정 할 수 있습니다 (u dint delet t ... u가 u를 다시 쓸 수 있다면 :)

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

콘솔에 null이 표시되고 작동하지 않으면 코드를 다시 재설정하십시오. 친구! 오류가 발생했습니다.

내 영어 죄송합니다!


-3

json 문자열과 파싱 된 json에 동일한 변수를 사용할 때이 오류가 발생했습니다.

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

기능을 다음과 같이 변경했습니다.

function usingjson(){
    var j = JSON.parse(json);
}

이제이 오류는 사라졌습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.