如何解析json数组?

时间:2017-05-18 08:04:41

标签: javascript arrays json node.js promise

通过使用节点js,我通过解析多个json文件获取特定值来生成下面的数组(2)。

我的json文件包含ID列表及其状态:isAvailable或undefined。enter image description here

所以在我的代码中,我解析了所有的json文件,但只查找第一个ID,并在下面的图片中获取可用性的statuts。如果它是真的意味着该ID可用。正如您可以看到文件的名称,它是生成json的日期和时间。

所以我想要实现的是编写一个函数或任何简单的函数,在这里我可以看到你在图片中看到的数组。 例: 我们可以看到状态可用于第一个文件,我想要恢复具有可用状态的第一个文件名

  

(" {fileName:' 2017-03-17T11:39:36 + 01:00',          状态:可用}"

当状态停止可用时,在我们的示例中({fileName:' 2017-04-06T11:19:17 + 02:00',content:undefined}) 得到:

  

{fileName:' 2017-04-06T11:19:17 + 02:00',状态:不可用}

(2) enter image description here

所以这是我生成这个数组的代码的一部分:

Promise.mapSeries(filenames, function(fileName) {
      var contents = fs
        .readFileAsync("./availibility/" + fileName, "utf8")
        .catch(function ignore() {});
      return Promise.join(contents, function(contents) {
        return {
          fileName,
          contents
        };
      });
    }).each(function(eachfile) {
      if(eachfile.contents){
        jsonobject = JSON.parse(eachfile.contents);
        if(jsonobject && jsonobject.hasOwnProperty('messages'))         
       // console.log(jsonobject.messages[0].message.results[2]); 
        eachfile.contents = jsonobject.messages[0].message.results[1].isAvailable;
      } 
      eachfile.fileName = eachfile.fileName.substring('revision_'.length,(eachfile.fileName.length-5));
    console.log(eachfile);

    })

请有人帮助我

谢谢,

1 个答案:

答案 0 :(得分:1)

假设你有一个数组:

[
   {
      filename : "2017-03-23 00:00:00",
      contents : true
   },
   ...
   {
      filename : "2017-03-23 00:00:00",
      contents : undefined
   },
   {
      filename : "2017-03-23 00:00:00",
      contents : undefined
   },
   {
      filename : "2017-03-23 00:00:00",
      contents : true
   }
]

其中......表示内容值为true的长对象流。 您希望最终得到一个对象列表,而没有具有相同内容值的后续对象,这意味着结果将如下所示:

[
    {
       filename : "2017-03-23 00:00:00",
       contents : true
    },
    {
       filename : "2017-03-23 00:00:00",
       contents : undefined
    },
    {
       filename : "2017-03-23 00:00:00",
       contents : true
    }
]

我将使用jQuery,因为这是一个我熟悉的javascript框架,但你应该能够轻松地将它翻译成你正在使用的任何框架。

function doit(dataArray) {

    var resultList = [];
    var currentContent = "";
    $.each(dataArray, function(index, value) {
        if(currentContent != value.content) {
            resultList.push(value);
            currentContent = value.content;
        }
    });

    console.log(resultList);
}

请注意,您需要一个数组,其数据看起来与图片中的数据相同,但是,您需要打印每一行。您可能需要将这些行添加到新数组中,然后将该数组传递给此函数。