キャッチされないsyntaxerror予期しないトークンU JSON


294

Chromeでページを実行すると、「キャッチされないsyntaxerror予期しないトークンU」というエラーが表示されます。そして、Firefoxでは「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」にあることを示しています。
カイルバートン

\"出力の中にある奇妙な問題である可能性があります。
Felix Kling、

そのJSONはうまく解析されます。あなたのコードが実際に窒息しているものを理解しようとする必要があります。
nneonneo 2012年

回答:


647

通常、このエラーは、値が JSON.parseが実際にであるundefinedます。それで、これを解析しようとしているコードをチェックします-ほとんどの場合、ここに表示されている実際の文字列を解析していません。


27
また"undefined"、リテラルではなく文字列の場合もありますundefined。私はそれを見つけるのに30分間費やしました。
ug_ 2014

13
@ ns47731それは実際には同じです。実際のundefinedがになるのuは、それundefinedが文字列に強制変換されるためです(文字列はJSON.parseが期待するものであるため)。
Sean Kinsey、2014

10
ああ、非同期リクエストを送信していて、すぐに未定義の戻り値を解析しようとしていました。自分にうんざりしています、ありがとう。
Chris Trudeau

7
このエラーは、json文字列の先頭にあるUTF-8 {"
でもスローされ

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ファイルからコンパイルされたソリディティコードを解析しているときに起こりました。

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ループの値の1つがnullを返す結果でした。したがって、そのプロパティにアクセスしようとすると失敗しました。

したがって、JSONArrays内でデータソースとその整合性が不明な場合は、この場合はnullおよび未定義の例外を処理するのが適切だと思います。

JSONArrayのfindの戻り値でnullをチェックし、例外を適切に処理することで修正しました。

これが役立つかもしれないと思った。


1

私の場合、XHRResponseが戻る前に、AJAX変数でJSON.parse()を呼び出そうとしていました。例えば:

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オブジェクトまたはアレイではありません。

だからJavaScriptの場合uは文字列を次のように解析します

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 dintが削除された場合...もしuが再度書き込んだ場合:))

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


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

コンソールはnullを表示し、tが機能しない場合はコードを再度リセットします。エラーが発生しました。

英語すみません!


-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.