Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript重新格式化JSON数组_Javascript_Json - Fatal编程技术网

JavaScript重新格式化JSON数组

JavaScript重新格式化JSON数组,javascript,json,Javascript,Json,我对JSON符号比较陌生,在尝试重新格式化时遇到了一个问题。数据库中包含的当前格式需要修改为新格式,以便导入到项目时间线图中 以下是当前的JSON格式: [ { "name":"5-HP-N/A-N/A-F8", "node":{ "name":"5", "id":14 }, "timeline":{ "epc":null, "m1":null, "m2":null, "m3":1554087600000, "

我对JSON符号比较陌生,在尝试重新格式化时遇到了一个问题。数据库中包含的当前格式需要修改为新格式,以便导入到项目时间线图中

以下是当前的JSON格式:

[
{
  "name":"5-HP-N/A-N/A-F8",
  "node":{
     "name":"5",
     "id":14
  },
  "timeline":{
     "epc":null,
     "m1":null,
     "m2":null,
     "m3":1554087600000,
     "m4":1593572400000,
     "m5":1625108400000,
     "m6":1641006000000,
     "m7":1656644400000
  },
  "fab":{
     "name":"F8",
     "id":1
  }
},
但是,为了在图形中显示,我需要以下格式:

    {
  'start': new Date(value from epc, or first non-null milestone),
  'end': new Date(value from m1 or first non-null milestone),  // end is optional
  'content': 'label from start Date milestone'
  'group' : ' value from name field above 5-HP'
  'classname' : ' value from start Date milestone' 
});
我正试图写一个函数来实现这一点。只有epc、m1或m2的值可能为null,但必须检查条件以确定是否应创建事件范围以及事件范围的结束位置。重新格式化此json数据(最好是从外部json表)的最佳方式是什么

编辑:感谢所有帮助,我现在看到了这是如何工作的!我相信我第一次解释得不是很好,实际上我需要每个“组”有多个课堂项目

最终的结果是,这些将在时间线图“组”线上内联显示,因此我试图找出如何为上面显示的每个数组元素创建多个新对象

因此,从技术上讲,第一个将具有开始日期=m3,结束日期=m4。然后,下一个对象将与第一个对象具有相同的组(5-HP…),开始日期=m4,结束日期=m5…等等。这将一直持续到m7(始终为结束日期,但从未为开始日期)到达


这就是为什么循环不是那么简单,因为需要检查许多条件。

请参见此处的工作小提琴:

您的输入数据似乎是一个数组,因此我围绕它构建了一个循环。如果不只是看到这把小提琴,输入数据是一个简单的对象:

如果您还没有到达数组的最后一个元素,您应该检查一下。如果是这样,当前[i+1]未定义,helperfunction应返回undefined

然后,您可以使用第一个里程碑作为回退:

secondMileStone = getMileStone(current[i + 1]) || firstMileStone;

查看更新的fiddle(包括签入getMileStone Helperfunction):

到目前为止您写了什么吗?为什么这不是一个简单的循环?问题是,我的数据是基于名称的不同组的数组,我必须放弃节点和晶圆厂信息。我可以用循环提取值,但可以提取标签吗?哇,谢谢!这真的很有帮助……我的一个问题是,我是否可以设置next=content[I+1];然后,设置secondMileStone=getMileStone(next),如果这样可以将结束日期设置为下一个里程碑的开始。请参阅我的编辑,只需在循环中使用getMileStone函数谢谢您的帮助!我已经编辑了上面的问题,因为您的解决方案当然可以做到这一点,但我需要从一个单一的JSON数组中创建多个对象(使用组作为公共性)。每个开始/结束日期对应一个,以加载到图形中
secondMileStone = getMileStone(current[i + 1]) 
secondMileStone = getMileStone(current[i + 1]) || firstMileStone;