[英]"Uncaught SyntaxError: Unexpected token {" when importing in TypeScript
[英]“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.