2017-04-22 84 views
0

我有我的NodeJS应用程序供应商API调用返回不同的对象,与下面是在JSON的一个对象的例子:最好的方法来转换数据

[{ 
"id": 365467865567, 
"type": "PERSON", 
"created_time": 1492809120, 
"updated_time": 1492809542, 
"last_contacted": 1492809128, 
"properties": [ 
    { 
    "type": "SYSTEM", 
    "name": "phone", 
    "value": "123456789" 
    }, 
    { 
    "type": "SYSTEM", 
    "name": "first_name", 
    "value": "Test2" 
    }, 
    { 
    "type": "SYSTEM", 
    "name": "last_name", 
    "value": "You" 
    }, 
    { 
    "type": "CUSTOM", 
    "name": "utm_medium", 
    "value": "email" 
    } 
] 
}] 

它不是很容易使用这种格式的数据,并需要将其转换为键值格式。类似的东西:

[{ 
"id": 365467865567, 
"type": "PERSON", 
"created_time": 1492809120, 
"updated_time": 1492809542, 
"last_contacted": 1492809128, 
"properties": 
    { 
    "phone": "123456789", 
    "first_name": "Test2", 
    "last_name": "You", 
    "utm_medium": "email" 
    } 
}] 

什么是最有效的方式来改变这种情况?

+0

我有,你是不是在找最有效的* *的方式来做到这一点的感觉,而是对于任何* *的方式,你可以做到这一点;) –

回答

2

尝试在属性上循环并重新分配变量。

var array = [{ 
    "id": 365467865567, 
    "type": "PERSON", 
    "created_time": 1492809120, 
    "updated_time": 1492809542, 
    "last_contacted": 1492809128, 
    "properties": [{ 
    "type": "SYSTEM", 
    "name": "phone", 
    "value": "123456789" 
    }, { 
    "type": "SYSTEM", 
    "name": "first_name", 
    "value": "Test2" 
    }, { 
    "type": "SYSTEM", 
    "name": "last_name", 
    "value": "You" 
    }, { 
    "type": "CUSTOM", 
    "name": "utm_medium", 
    "value": "email" 
    }] 
}]; 

array.forEach(function(obj) { 
    var properties = {}; 
    obj.properties.forEach(function(prop) { 
    properties[prop.name] = prop.value; 
    }); 
    obj.properties = properties; 
}); 

https://jsfiddle.net/hycg5r80/3/

+1

一个'for'和嵌套的'forEach' ? - 这有点..非正统 - 为什么不是2'for'或者只是2'forEach'而不是? –

+1

我会解决这个问题。主要是因为我没有意识到json对象最初是一个数组(我的错误)。 – AndyB

2

这里有一个方法,如果IDK的最有效的,但它的短ñ甜蜜。

thing[0].properties = thing[0].properties.reduce((p, n) => ( 
    n[p.name] = p.value; 
    return n; 
), {}); 
相关问题