2017-04-22 114 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; 
), {}); 
相關問題