我需要从两个平面结构化数组中创建一个嵌套的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发生下一次发生。
问题是我无法编写循环来获取输出。我现在尝试过迭代和连接这两个数组的事情
提前感谢您的帮助。
答案 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"]
}]