使用javascript和组合值减少JSON对象中的冗余信息

使用javascript和组合值减少JSON对象中的冗余信息,javascript,node.js,json,csv,lodash,Javascript,Node.js,Json,Csv,Lodash,我有一个CSV的结果,查看图片,猜测图片是否包含某个属性。在这种情况下,如果图片中的对象是男性或女性 我正在使用javascript/node将这个CSV转换为JSON,我希望获取属性及其值,并将它们放入每个pciture中一个对象的数组中。现在CSV的每一行度量和属性,但它意味着每个图像至少有两行 csv的简单版本: path, detect_id, score, x-coord, y-coord, w-coord, h-coord, attribute, value picture_1.j

我有一个CSV的结果,查看图片,猜测图片是否包含某个属性。在这种情况下,如果图片中的对象是男性或女性

我正在使用javascript/node将这个CSV转换为JSON,我希望获取属性及其值,并将它们放入每个pciture中一个对象的数组中。现在CSV的每一行度量和属性,但它意味着每个图像至少有两行

csv的简单版本:

path, detect_id, score, x-coord, y-coord, w-coord, h-coord, attribute, value

picture_1.jpg,0,1.44855535,74,54,181,181,genderf,0.024716798
picture_1.jpg,0,1.44855535,74,54,181,181,genderm,0.975283206
我可以将此CSV转换为JSON,然后至少按路径/文件名将项目分组在一起

但这会留下很多冗余信息,我想把我的属性和它们的值放在一个嵌套对象中,在主对象中

比如:

Path: picture_1.jpg
Attributes: [genderf: 0.025, 
             genderm: 0.985]
other_info: other info
现在我使用lodash创建对象,如下图所示,但如果我尝试映射属性,我最终会推出除最后一个元素之外的所有元素

因此,我可以使用以下代码创建对象

var result = 
    _([...arr1, ...arr2])
    .concat()
    .groupBy("path")
    .value();
其中,arr1和arr2是来自输出csv一行的数据。除属性及其值外,所有信息都相同

这让我得到了这个对象:

{
  "picture_1.jpg": [
    {
      "path": "picture_1.jpg",
      "detect_id,": "0",
      "score,": "1.44855535",
      "coordinates": [
        {
          "x,": "74",
          "y,": "54",
          "w": "181",
          "h": "181"
        }
      ],
      "attribute": "genderf",
      "value": "0.024716798"
    },
    {
      "path": "picture_1.jpg",
      "detect_id,": "0",
      "score,": "1.44855535",
      "coordinates": [
        {
          "x,": "74",
          "y,": "54",
          "w": "181",
          "h": "181"
        }
      ],
      "attribute": "genderm",
      "value": "0.975283206"
    }
  ]
}

它至少根据路径标题将图片分组在一起,但许多信息是冗余的,这只是测量一个属性

您只需迭代所有
csv
-行,构建一个
对象/映射
,同时跟踪已找到的文件名/路径。如果遇到路径已存在于地图中的行,只需附加
属性/值
对即可。类似这样的内容(请注意,为了简单起见,我更改了coords分隔符,并且它需要正确的错误处理):

const data=[“picture_1.jpg,0,1.44855535,74;54;181;181,genderf,0.024716798”,“picture_1.jpg,0,1.44855535,74;54;181;181,genderm,0.975283206”];
函数createImageDataMap(dataArr){
常量imageDataResult={};
用于(数据阵列的常数imgData){
常数currData=parseImgDataLine(imgData);
如果(!imageDataResult[currData.path]){
imageDataResult[currData.path]={
属性:[],其他信息:{
分数:currData.score,
detectId:currData.detectId,
coords:currData.coords
}
}
}
imageDataResult[currData.path].attributes.push({[currData.attribute]:currData.value});
}
返回imageDataResult;
}
函数parseImgDataLine(行){
常量属性=line.split(',');
返回{
路径:属性[0],
detectId:属性[1],
分数:属性[2],
坐标:属性[3],
属性:属性[4],
值:属性[5]
}
}

log(JSON.stringify(createImageDataMap(data))