在Javascript中从两个平面结构化数组格式化JSON

时间:2015-02-19 15:47:30

标签: javascript arrays json performance data-structures

我需要从两个平面结构化数组中创建一个嵌套的JSON,它们是一种链接在一起的,我能够获得第一级但不能在javascript中嵌套它。

以下是问题陈述。

我有2个阵列:

data = ["HSP - FS", "FS-M", "Lo Co", "GO A", "CQM","whatever"];

type = ["Epic","Sub - Epic","Sub - Epic","Epic","Sub - Epic","Story"];

type数组和data数组链接在一起,并在同一索引上使用类型和说明,如

type[0]这是data[0],所以它将是" Epic:HSP-FS",但这不会在这里结束,这个Epic还有子元素也是Sub - Epics及其描述放在同一个数组元素下,因此type[1]是" Sub-Epic"其数据位于data[1],即" FS-M"等到下一个" Epic"在类型数组中找到。

所以JSON就像

{0:{
        Epic: "HSP - FS",
        Sub-Epic:"FS-M",
        Sub-Epic:"Lo Co"
    },    
    1:{
        Epic: "GO A",
        Sub-Epic:"CQM",
        Story:"whatever"
    }}

数组和JSON的结构是固定的,甚至数组也可以有任意数量的Epics,Sub Epics或者故事,但是顺序将被维护,因为Epics的所有子项都将存在,直到Epic发生下一次发生。

问题是我无法编写循环来获取输出。我现在尝试过迭代和连接这两个数组的事情

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您不能在JSON对象中重复命名属性,但可以改为使用数组:

var array = [];

for(var i=0; i < data.length; ++i)
{
    var t = type[i];
    var d = data[i];


    if (t == "Epic")
    {
         array.push({ "Epic": d});
    }
    else
    {
         if(typeof(array[array.length-1][t]) == "undefined")
         {
             array[array.length-1][t] = [];
         }

         array[array.length-1][t].push(d)        
    }
}

这是结果JSON:

[{
    "Epic": "HSP - FS",
    "Sub - Epic": ["FS-M","Lo Co"]
 },    
 {
    "Epic": "GO A",
    "Sub - Epic": ["CQM"],
    "Story": ["whatever"]
 }]