簡體   English   中英

當沒有“:”時,“未捕獲的SyntaxError:意外令牌:”嗎?

[英]“Uncaught SyntaxError: Unexpected token :” when there is no “:”?

給定不帶索引的JSON數據:

var knol = [
    {"hant":"火","status":1,"rank":30,"score": 1},
    {"hant":"人","status":1,"rank":33,"score": 2}, 
    {"hant":"山","status":1,"rank":60,"score": 5}, 
    {"hant":"是","status":1,"rank":50,"score": 3}
];

給定一個JS函數以使用索引重新創建數據:

var addIndex = function(object, key1, key2){
    var data = object;
    var newData = "[";

    for (var i in data) {
        if (!key2) {
            var newIndex = data[i][key1]
        } else {
            var newIndex = data[i][key1] + data[i][key2]
        }

        newData = newData + "\"" + newIndex + "\":" + JSON.stringify(data[i]) +",";
    }

    newData = newData.concat("]").replace(",]", "]");
    console.log(newData);
    newData = JSON.parse(newData);
    return newData;
};

knol = addIndex(knol, "hant");

我收到錯誤信息"Uncaught SyntaxError: Unexpected token :" ,而代碼中的指定位置沒有“:”。 這似乎使我的大腳本崩潰了。 知道發生了什么嗎?

小提琴: http : //jsfiddle.net/n9pf6/2/

中間JSON不正確,因此最終JSON.parse失敗。 中間文本為["火":{"hant":"火",.. ,如控制台上所報告的那樣,的確是不正確的,因為數組沒有鍵。

只需將整個對象圖作為JS對象構建/重建,然后在其上使用JSON.stringify一次-否則,在這種情況下,永遠不要使用,因為最終結果還是一個JS對象!

var addIndex = function(data, key1, key2){
    var newData = {}; // new JS object - there is /no/ JSON here.
    var newIndex;
    for(var i in data){
        if(!key2){
           newIndex = data[i][key1];
        }else{
           newIndex = data[i][key1] + data[i][key2];
        }
        // add data to new object with appropriate property/key
        // and do NOT manually build JSON text.
        newData[newIndex] = data[i];
    }
    // return object directly; it's not JSON text, no need to parse it!
    return newData;
};

您需要創建一個對象( {…} ),而不是一個數組( […] )。 這將工作:

var newData = "{";
for(var i in data){
    if(!key2){ var newIndex = data[i][key1] }else{ var newIndex = data[i][key1]+ data[i][key2]}
    newData = newData + "\""+newIndex+"\":"+JSON.stringify(data[i])+",";
    }
newData = newData.concat("}").replace(",]", "]").replace(",}", "}");

但是,我強烈建議您直接處理數據,而不要嘗試從各個部分手動構造JSON字符串。

這是一個簡單的實現:

var addIndex = function(object, key1, key2){
    var data = object, newData = {}, newIndex;
    for(var i in data){
        if(!key2){ 
            newIndex = data[i][key1];
        }else{ 
            newIndex = data[i][key1]+ data[i][key2];
        }
        newData[newIndex] = data[i];
    }
    console.log(newData);

    return newData;
};

示范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM