【问题标题】:How to convert two HashMap into single JSON array using node JS如何使用节点 JS 将两个 HashMap 转换为单个 JSON 数组
【发布时间】:2019-12-12 23:55:25
【问题描述】:

我在两个 HashMap 中有一个数据,我只是使用嵌套的 for 循环打印它,如下所示:

注意:我刚才提到的输入只是举例。实际的 hashmap 包含运行时数据,应该存储为 key:value 对。

代码:

     let index=0;

     getData.forEach(function(value,key){
         utils.getIndividualComponentCompletLog(key,'./output/output'+index+'.json');
         let getError =  utils.getErrorDataFromComponent('./output/output'+index+'.json');
     getError.forEach(function(value,key){
         console.log(value);
        })
        index++;
    })

地图输入:

 Map 1: {"a":"1","b":"2","c":"3"} and  Map 2: {"d":"4","e":"5"}

上面的代码getData和getError是HasMap,我只想用上面两个hashmap值创建一个JSON数组,如下所示:

预期:

 {
       data :[
               {
                 "a" : "1",
                 "b" : "2",
                 "c" : "3"
                },
                {
                 "d" : "4",
                 "e" : "5"
                }
             ]
     }

我不确定如何实现这一点。有人可以给我一些想法或任何 npm 包都会这样做

还为单个 HashMap 尝试了 JSON.stringify()(不确定如何将它用于两个 hasmap 并将其合并为单个)。但它没有给出上述格式。

更新:

尝试以下几行将其转换为 JSON 数组。尝试使用一个哈希图。

代码

 const output = {
                data: [
                    getError
                ]
              }
    console.log(JSON.stringify(output, null, 2));

getError 是包含一些值的 hashmap

输出:

{
  "data": [
    {
      "_data": {},
      "size": 0
    }
  ]
}
{
  "data": [
    {
      "_data": {},
      "size": 0
    }
  ]
}
{
  "data": [
    {
      "_data": {},
      "size": 0
    }
  ]
}

【问题讨论】:

  • 你能创建一个源数据和想要的数据吗?
  • 我不确定如何构建预期的结果。
  • push() 在那个循环里面?您可能希望提供有关输入映射的外观以及输出外观的详细信息。就像如果这两个地图是{"a":1,"b":2}{"c":3,"d":4},那么最后的“数组”会是什么。 [1,2,3,4]?也许不是数组?
  • 我希望输出为 JSON 数组格式,如上文预期部分所述。
  • 我觉得这里有一个问题,因为代码太简单了? jsbin.com/pezubus/edit?js

标签: javascript arrays node.js json


【解决方案1】:

如果你有一个(Hash)MapObject.fromEntries() 可以从中创建一个“常规”对象。然后JSON.stringify() 将起作用:

let map1 = new Map([["a","1"],["b","2"],["c","3"]]);
let map2 = new Map([["d","4"],["e","5"]]);
console.log("With fromEntries()",JSON.stringify(
  {data:[Object.fromEntries(map1),Object.fromEntries(map2)]}
));
console.log("Without fromEntries()",JSON.stringify({data:[map1,map2]}));

Object.fromEntries() 似乎不适用于 IdeOne.com(我附近没有其他 node.js 环境),但forEach() 的解决方法可以:

function objectify(map) {
  let obj = {};
  map.forEach((key,value)=>obj[key]=value);
  return obj;
}
let map1 = new Map([["a","1"],["b","2"],["c","3"]]);
let map2 = new Map([["d","4"],["e","5"]]);
console.log(JSON.stringify(
  {data:[objectify(map1),objectify(map2)]}
));

Node.js 测试:https://ideone.com/Esgc9R

【讨论】:

  • 仍然返回空的json,如上所述。
  • @ArrcanaMohan 添加了一个在在线 node.js 环境中对我有用的变体。不幸的是,我无法使用第 3 方 HashMap 包进行测试,我必须假设 forEach() 的工作方式相同。
猜你喜欢
  • 2021-09-05
  • 2016-02-18
  • 2019-05-08
  • 2014-02-14
  • 2018-05-19
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多