您好我需要解析一个包含多个键的JavaScript数组。这是我需要做的一个例子。任何帮助表示赞赏。
[
week1{
Meth:100,
Marijuana:122,
pDrugs:12,
},
week2{
Meth:15,
Marijuana:30,
pDrugs:22,
},
]
我需要根据它是否为week1或week2将其分解为单独的数组。再次感谢。
结局必须是这样的。
week1 = ["Meth:100,Marijuana:122,pDrugs12"] etc.
答案 0 :(得分:0)
您的JSON格式不正确。如果它已经是一个对象(我猜它不是 - 否则,你将在浏览器控制台中得到意外的令牌错误),然后将括号更改为大括号,删除尾随的逗号,并在之后添加冒号没有它们的对象项(在week1
和week2
之后)。
如果你拥有的是一个字符串(从XHR或类似的东西获得),你将不得不做上面提到的所有更改,以及将每个对象项包含在引号内。它应该看起来像:
{
"week1": {
"Meth":100,
"Marijuana":122,
"pDrugs":12
},
"week2": {
"Meth":15,
"Marijuana":30,
"pDrugs":22
}
}
无论你正在处理什么,服务如此可怕的无效JSON应该被取回并开枪。尽管如此,这需要一些严格的字符串操作。你将不得不用String.replace()
和一些正则表达式进行彻底的按摩。
获得JSON后,您可以使用JSON.parse获取week1并向下钻取生成的对象。
function log(what) { document.getElementById('out').value += what + '\n------------------\n'; }
var tree = '[ week1{ Meth:100, Marijuana:122, pDrugs:12, }, week2{ Meth:15, Marijuana:30, pDrugs:22, }, ]';
// string is raw
log(tree);
tree = tree.replace(
'/\r?\n/g', '' // remove line breaks to make further regexps easier
).replace(
'[','{' // replace [ with {
).replace(
']','}' // replace ] with }
).replace(
/\w+(?=[\{\:])/g, // add quotes to object items
function($1) { return '"'+$1+'"'; } // using a lambda function
).replace(
/"\{/g, '": {' // add colon after object items
).replace(
/,(?=\s*\})/g, '' // remove trailing commas
);
// string has been fixed
log(tree);
var obj = JSON.parse(tree);
log('obj.week1 = ' + JSON.stringify(obj.week1));
log('obj.week1.Meth = ' + obj.week1.Meth);
#out {
width: 100%;
height: 170px;
}
<textarea id="out"></textarea>