我在JavaScript中有一个如下所示的数组:
var pattern = [ ["C5", 3], , , , , , , , ["C5", 3], , , ]
我想将它存储在像这样的json文件中:
{
"pattern": [
["C5", 3], , , , , , , , ["C5", 3], , ,
]
}
JSONLint告诉我:
Parse error on line 6:
... ], , ,
---------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
所以我理解我不能让逗号之间的空格为空。什么类似于空,但被JSON标准接受?
此模式文件是Javascript音乐跟踪器的一部分我正在制作类似于脉冲跟踪器,我希望json文件尽可能干净。
答案 0 :(得分:4)
如果你想在JSON中有空格,你应该用null
填充它。
示例:
var pattern = [ ["C5", 3], null, null, null, null, null, null, null, ["C5", 3], null, null, null, null, ...... ]
答案 1 :(得分:1)
如果您不想将null
与稀疏数组一起使用,则可以使用数组的对象表示。
pattern = [["C5", 3], , , , , , , , ["C5", 3], , , ]
...将被一个索引值为属性的对象替换,另外还有一个length
属性:
parse_array = {
0: ["C5", 3],
8: ["C5", 3],
length: 12
}
可以使用reduce
方法从数组生成此对象:
parse_array = pattern.reduce( ( obj, val, i ) =>
{
obj.length++
if ( val )
obj[i] = val
return obj
}, { length: 0 } )
然后使用简单的箭头函数将对象转换为JavaScript数组很容易:
pattern = Array.from( parse_array, v => v )
//Encode array
var pattern = [["C5",3],null,null,null,null,null,null,null,["C5",3],null,null,null]
out.innerHTML = JSON.stringify( pattern ) + "\n"
var parse1 = pattern.reduce( ( obj, val, i ) =>
{
obj.length++
if ( val )
obj[i] = val
return obj
}, { length } )
out.innerHTML += JSON.stringify( parse1 ) + "\n"
//Decode object
var parse2 = {
0: ["C5", 3],
8: ["C5", 3],
length: 12
}
out.innerHTML += JSON.stringify( parse2 ) + "\n"
out.innerHTML += JSON.stringify( Array.from( parse2, v => v ) ) + "\n"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<h3>JSON array with empty items</h3>
<pre id="out"></pre>
</body>
</html>