我想创建一个JSON对象words
,它进一步包含一个列表
对象s
和e
具有不同的值,如下所示:
words = {
"a1": { s: 1.5, e: 2 },
"a2": { s: 2.1, e: 2.4 },
"a3": { s: 2.5, e: 3 },
"a4": { s: 3.5, e: 3.8 },
"a5": { s: 3.9, e: 4.5 },
"a6": { s: 4.8, e: 5.2 },
"a7": { s: 5.3, e: 5.3 },
"a8": { s: 6.5, e: 7 },
"a9": { s: 7.2, e: 8 },
"a10": { s: 8.1, e: 8.4 }
};
我需要使用for
循环添加这些值。我申请了
以下解决方案:
var words = {};
var xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];
words = '{';
for (var i = 0; i <= 10; i++) {
if (i == 10)
var obj = '\"a' + i + '\"'+': { s:' + xyz[i] + ', e:' + xyz[i + 1] + '}';
else
var obj = '\"a' + i + '\": { s:' + xyz[i] + ', e:' + xyz[i + 1] + '},';
words = words + obj;
}
words = words + '}';
$.parseJSON(words);
但这会产生错误:
未捕获的SyntaxError:意外的令牌s **
由于这个原因,我无法创建对象。
答案 0 :(得分:4)
您不需要创建JSON字符串,然后使用JS解析它:使用它可以轻松完成:
var words = {},
xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];
for (var i = 0, l = xyz.length/2; i < l; i++) {
words['a' + (i + 1)] = {
s: xyz[2*i],
e: xyz[2*i + 1]
};
}
console.log(words);
说明:浏览源数组,将每对数据转换为对象文字并使用括号表示法将其分配给words
对象(以便将'a' + (i+1)
的值计算为新键)。
答案 1 :(得分:1)
基本上没有理由手动在浏览器中创建JSON字符串,而是创建对象,然后在其上使用JSON.stringify
。 (大多数浏览器默认使用它,否则你可以添加垫片。)例如:
var counter;
var words = {};
var xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];
var i;
counter = 0;
for (i = 0; i < xyz.length; i += 2) {
++counter;
words["a" + counter] = {s: xyz[i], e: xyz[i + 1]};
}
console.log("words (before stringify):", words);
words = JSON.stringify(words);
console.log("words (after stringify):", words);
如果您要手动创建JSON,则需要learn and follow its rules。密钥必须是双引号(例如,"s": ...
而不是s: ...
)。