【问题标题】:Convert result json to different format javascript将结果 json 转换为不同格式的 javascript
【发布时间】:2019-11-10 07:52:26
【问题描述】:

我正在开发需要将响应 json 转换为不同格式并将其传递给不同 API 的应用程序。我发现很难转换所需的结构。

输入:

var value = `[
    {
    "PRODUCT_GROUP": "Accessories",
    "MATERIAL_GROUP": "S98",
    "MATERIAL": "300154",
    "MATERIAL_DESC": "BLOCKS", 
    "PP_AD": 45.7,
    "PP_DISC_OLD": 34.7      
    },
    {
    "PRODUCT_GROUP": "Accessories",
    "MATERIAL_GROUP": "S98",
    "MATERIAL": "000000000000300155",
    "MATERIAL_DESC": "PALLET",
    "PP_AD": 123.7,
    "PP_DISC_OLD": 43.7  
    }, 
    {
    "PRODUCT_GROUP": "Accessories",
    "MATERIAL_GROUP": "S99",
    "MATERIAL": "300155",
    "MATERIAL_DESC": " WOODEN",
    "PP_AD": 23.7,
    "PP_DISC_OLD": 23.7  
    }
    ]`;

我需要将其转换为下面提到的结果。

输出:

{
    "categoreies": [{
            "PRODUCT_GROUP": "Accessories",
            "MATERIAL_GROUP": "S98",
            "categoreies": [{
                "MATERIAL": "300154",
                "MATERIAL_DESC": "BLOCKS",
                "PP_AD": 45.7,
                "PP_DISC_OLD": 34.7
            }, {
                "MATERIAL": "000000000000300155",
                "MATERIAL_DESC": "PALLET",
                "PP_AD": 123.7,
                "PP_DISC_OLD": 43.7
            }]
        },
        {
            "PRODUCT_GROUP": "Accessories",
            "MATERIAL_GROUP": "S99",
            "categoreies": [{
                "MATERIAL": "300155",
                "MATERIAL_DESC": " WOODEN",
                "PP_AD": 23.7,
                "PP_DISC_OLD": 23.7
            }]
        }
    ]
}]

我试图循环代码并形成一个对象,但得到了想要的结果。

请帮忙。

value=JSON.parse(value);
let firstobj={},arr1=[],secobj={},arr2=[],finalobj={};
value.forEach((items)=>{
    firstobj.PRODUCT_GROUP=items.PRODUCT_GROUP;
    firstobj.MATERIAL_GROUP=items.MATERIAL_GROUP;

    arr1.push(firstobj);

    secobj.MATERIAL=items.MATERIAL;
    secobj.MATERIAL_DESC=items.MATERIAL_DESC;

    arr2.push(secobj);

    finalobj.CATEGORIES=arr2;

     console.log(finalobj)
})

你能帮我把输入的json转换成结果的json吗

【问题讨论】:

  • 你忘了问一个问题
  • @zerkms: 需要将输入json转换成结果json。
  • 问题不是需求或愿望的表达。它通常带有一个问号。您在尝试时遇到的具体编程相关问题是什么?
  • @trincot 我无法转换为所需的格式。这需要传递给 API。如果您可以指导如何转换为所需的格式。
  • "。如果您能指导如何转换为所需的格式。" --- 从更简单的开始:从原始数组中取出一项,并将其属性之一转换为所需的格式。只有一个对象的一个​​属性。你能做到吗?如果不是 - 你现在对那个小问题的确切问题是什么?

标签: javascript node.js


【解决方案1】:

您可以为每个条目创建一个键,该键是产品和材料组的组合(例如 JSON)。然后使用这些键和数组作为值创建一个 Map,最初都是空的。然后迭代数据以填充这些数组。最后将该 Map 转换为目标结构。

let value = `[{"PRODUCT_GROUP": "Accessories","MATERIAL_GROUP": "S98","MATERIAL": "300154","MATERIAL_DESC": "BLOCKS","PP_AD": 45.7,"PP_DISC_OLD": 34.7},{"PRODUCT_GROUP": "Accessories","MATERIAL_GROUP": "S98","MATERIAL": "000000000000300155","MATERIAL_DESC": "PALLET","PP_AD": 123.7,"PP_DISC_OLD": 43.7},{"PRODUCT_GROUP": "Accessories","MATERIAL_GROUP": "S99","MATERIAL": "300155","MATERIAL_DESC": " WOODEN","PP_AD": 23.7,"PP_DISC_OLD": 23.7}]`;

let arr = JSON.parse(value).map(({PRODUCT_GROUP, MATERIAL_GROUP, ...rest}) => 
    ({ group: JSON.stringify({PRODUCT_GROUP, MATERIAL_GROUP}), rest})
);
let map = new Map(arr.map(({group}) => [group, []]));
arr.forEach(({group, rest}) => map.get(group).push(rest));
let result = Array.from(map.entries(), ([group, categories]) =>
    ({...JSON.parse(group), categories})
);

console.log(result);

【讨论】:

    【解决方案2】:

    试试这个:

    var value = `[
        {
        "PRODUCT_GROUP": "Accessories",
        "MATERIAL_GROUP": "S98",
        "MATERIAL": "300154",
        "MATERIAL_DESC": "BLOCKS", 
        "PP_AD": 45.7,
        "PP_DISC_OLD": 34.7      
        },
        {
        "PRODUCT_GROUP": "Accessories",
        "MATERIAL_GROUP": "S98",
        "MATERIAL": "000000000000300155",
        "MATERIAL_DESC": "PALLET",
        "PP_AD": 123.7,
        "PP_DISC_OLD": 43.7  
        }, 
        {
        "PRODUCT_GROUP": "Accessories",
        "MATERIAL_GROUP": "S99",
        "MATERIAL": "300155",
        "MATERIAL_DESC": " WOODEN",
        "PP_AD": 23.7,
        "PP_DISC_OLD": 23.7  
        }
        ]`;
    	
    
    value = JSON.parse(value);
    
    let outputobj = {};
    outputobj.categories = [];
    
    let tmpdict = {};
    
    
    value.forEach((items)=>{	
    	
    	if (!tmpdict[items.MATERIAL_GROUP]){
    		tmpdict[items.MATERIAL_GROUP] = {
    			"PRODUCT_GROUP" : items.PRODUCT_GROUP,
    			"MATERIAL_GROUP" : items.MATERIAL_GROUP,
    			"categories" : []		
    		}
    	}
    	let tmpobj = {
    		"MATERIAL" : items.MATERIAL,
    		"MATERIAL_DESC" : items.MATERIAL_DESC,
    		"PP_AD" : items.PP_AD,
    		"PP_DISC_OLD" : items.PP_DISC_OLD	
    		
    		}
    	
    	tmpdict[items.MATERIAL_GROUP].categories.push(tmpobj); 	
    	    	
    	
    })
    
    for (let key in tmpdict){
    	outputobj.categories.push(tmpdict[key]);
    }
    
    console.log(outputobj);
    newJSON = JSON.stringify(outputobj);
    
    console.log(newJSON);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2018-06-13
      • 1970-01-01
      • 2020-02-04
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多