1. ホーム
  2. javascript

[解決済み] Uncaught SyntaxError: 位置36でJSONで予期しないトークンp

2022-02-05 01:59:50

質問

シェアポイントを使ってウェブページを作成しているので、以下のようにajaxでデータを取得するためにjsonを使用しています。

function completeFleet(data, target, eng) {
var items = data.d.results;
console.log(items);
var prefix = "<div class='row'>";
var sufix = "</div>";
var menu = "<div class='col-md-4'>";
var cat = "";
var spec = "";
var counter = 0;
var obj = null;
for (item in items) {
    spec = "";
    if (counter == 1) {

        menu += "</div><div class='col-md-4'>";
        counter = 0;
    }
    if (eng) {
        obj = JSON.parse(items[item].Specifications);
        for (var key in obj) {
            spec += "<div class='row'><div class='col-md-12 ftBottomSeparator'><span class=' t10'>" + key + "</span>&nbsp;<span class='t06' style='float:right;'>" + obj[key] + "</span></div></div>";
        }
        menu += "<div class='row ftContainerOut'><div class='col-md-12 ftContainer'><div class='row ftHeader'><div class='col-xs-9 t09'>" + items[item].Title + "</div><div class='col-xs-3 text-right'></div></div><div class='row'><div class='col-md-6' style='padding-top:10px'><img src='" + items[item].Imagen.Url + "' class='img-responsive img-center' style='border:0px solid blue; max-width:150px;max-height:120px;' /></div><div class='col-md-6'>" + spec + "</div></div></div></div>";
    } else {
        obj = JSON.parse(items[item].Especificaciones);
        for (var key in obj) {
            spec += "<div class='row'><div class='col-md-12 ftBottomSeparator'><span class=' t10'>" + key + "</span>&nbsp;<span class='t06'  style='float:right;'>" + obj[key] + "</span></div></div>";
        }

        menu += "<div class='row ftContainerOut'><div class='col-md-12 ftContainer'><div class='row ftHeader'><div class='col-xs-9 t09'>" + items[item].Title + "</div><div class='col-xs-3 text-right'></div></div><div class='row'><div class='col-md-6' style='padding-top:10px'><img src='" + items[item].Imagen.Url + "' class='img-responsive img-center' style='border:0px solid blue; max-width:150px;max-height:120px;' /></div><div class='col-md-6'>" + spec + "</div></div></div></div>";
    }
    counter++;
}
$(target).html("<div class='panel-body'><div class='container-fluid'>" + prefix + menu + sufix + "</div></div>");

}

私のウェブページは英語とスペイン語ですが、英語ではすべてのデータをチャージしますが、スペイン語ではこれらのうち1つはデータを表示しません。 36の位置でエラーが発生し、36の位置が表示されない項目です。何が問題なのでしょうか?ご担当者様

これらの作品は

そして、これは動作しません。

---------Update------------

この行をコメントすると

 //obj = JSON.parse(items[item].Especificaciones);

を置き

 if(items[item].Especificaciones){
 JSON.parse(items[item].Especificaciones);
   }

画像付きで実行されるようになりましたが、quot;Especificaciones"のリストがありません。

を使用すると

var stringifyObj = JSON.stringify(items[item].Especificaciones); 
var obj = JSON.parse(stringifyObj);

こんなのが出てきます。

解決方法は?

JSON.parseの中で、対応するキーの値がNULLでないことを確認してください。例えば

JSON.parse(items[item].Specifications)

アイテムがアイテムインデックスに値を持ち、items[item]がプロパティSpecificationを持っていることを確認します。

JSON.parseの前にitems[item].SpecificationsがNULLでないことを確認することができます。

if(items[item].Specifications){
  JSON.parse(items[item].Specifications)
}

更新情報

JSON.parse()は、JSON表記を含む文字列をJavascriptオブジェクトに変換するために使用します。有効なJSONであるためには、文字列は二重引用符で囲まれている必要があります。

オブジェクトを文字列化して、再度パースしてみてください。

var stringifyObj = JSON.stringify(items[item].Especificaciones); 
var obj = JSON.parse(stringifyObj);

エラーの原因は、JSON.parse()がString値を想定しており、items[item].EspecificacionesがArrayであることです。