Javascript &引用;未捕获的SyntaxError:意外标记:“0”;当没有“时”:&引用;?

Javascript &引用;未捕获的SyntaxError:意外标记:“0”;当没有“时”:&引用;?,javascript,jquery,google-chrome-devtools,Javascript,Jquery,Google Chrome Devtools,给定的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} ]; var addIndex = fu

给定的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}
];
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");
给定了一个JS函数来重新创建带有索引的数据:

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}
];
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");
我在代码中指定的位置得到错误
“uncaughtsyntaxerror:意外标记:”
,而没有“:”。这似乎使我的大脚本崩溃了。知道发生了什么吗


Fiddle:

中间JSON不正确,因此最终的
JSON.parse失败。中间文本是
[”火":{“汉特”:火“,…
,正如控制台上报告的那样,这确实是不正确的,因为数组没有键

只需将整个对象图构建/重建为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;
};

中间JSON不正确,因此最终的
JSON.parse
失败。中间文本为
[”火“:{“汉特”:”火“,…
,正如控制台上报告的那样,这确实是不正确的,因为数组没有键

只需将整个对象图构建/重建为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;
};

中间JSON不正确,因此最终的
JSON.parse
失败。中间文本为
[”火“:{“汉特”:”火“,…
,正如控制台上报告的那样,这确实是不正确的,因为数组没有键

只需将整个对象图构建/重建为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;
};

中间JSON不正确,因此最终的
JSON.parse
失败。中间文本为
[”火“:{“汉特”:”火“,…
,正如控制台上报告的那样,这确实是不正确的,因为数组没有键

只需将整个对象图构建/重建为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;
};

您需要创建一个对象(
{…}
),而不是一个数组(
[…]
)。这可以:

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

您需要创建一个对象(
{…}
),而不是一个数组(
[…]
)。这可以:

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

您需要创建一个对象(
{…}
),而不是一个数组(
[…]
)。这可以:

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

谢谢,这个答案太棒了。我想知道怎么做。谢谢,这个答案太棒了。我想知道怎么做。谢谢,这个答案太棒了。我想知道怎么做。谢谢,这个答案太棒了。我想知道怎么做。+1看起来我们两个都独立开发了几乎相同的解决方案。+1看起来我们两个E独立开发了几乎相同的解决方案。+1看起来我们都独立开发了几乎相同的解决方案。+1看起来我们都独立开发了几乎相同的解决方案。