解析具有多个键的javascript数组

时间:2014-11-19 15:37:20

标签: javascript arrays key

您好我需要解析一个包含多个键的JavaScript数组。这是我需要做的一个例子。任何帮助表示赞赏。

[
    week1{
        Meth:100,
        Marijuana:122,
        pDrugs:12,
    },
    week2{
        Meth:15,
        Marijuana:30,
        pDrugs:22,
    },
]

我需要根据它是否为week1或week2将其分解为单独的数组。再次感谢。

结局必须是这样的。

week1 = ["Meth:100,Marijuana:122,pDrugs12"] etc.

1 个答案:

答案 0 :(得分:0)

您的JSON格式不正确。如果它已经是一个对象(我猜它不是 - 否则,你将在浏览器控制台中得到意外的令牌错误),然后将括号更改为大括号,删除尾随的逗号,并在之后添加冒号没有它们的对象项(在week1week2之后)。

如果你拥有的是一个字符串(从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>