#javascript #arrays #json #javascript-objects
#javascript #массивы #json #javascript-объекты
Вопрос:
Я работаю над лямбда-функцией, которая GET
передает данные из одного API и POST
передает их другому. Данные представляют собой список контактов со свойствами, например, имя, фамилия, электронная почта и т.д.
Вывод JSON содержит слишком много свойств, которые мне не нужны. Смотрите приведенный Ниже пример кода (фактический код содержит гораздо больше свойств и вложенных массивов / объектов).
{
"contacts": [
{
"addedAt": 1532803458796,
"vid": 101
}
],
"merge-audits": [],
"properties": {
"first-name": {
"value":"hello"
},
"last-name": {
"value":"there"
},
"email": {
"value":"hello@there.com"
}
...
...
}
Как я могу перебирать каждый объект JSON для создания нового, более простого массива JSON, подобного следующему:
[
{
"email": "example@example.com",
"first_name": "",
"last_name": "User"
},
{
"email": "example2@example.com",
"first_name": "Example",
"last_name": "User"
}
]
Заранее спасибо за вашу помощь.
Комментарии:
1. JSON — это текст. Когда вы говорите «raw JSON», вы, кажется, действительно подчеркиваете, что это JSON… но так ли это? Или мы начинаем с объекта JavaScript?
2. есть ли в вашем json несколько ключей, называемых properties или что-то в этом роде?
Ответ №1:
попробуйте
json.map( x => ({
email: x.properties.email.value,
first_name: x.properties['first-name'].value,
last_name: x.properties['last-name'].value,
}));
let json = [
{
"contacts": [{
"addedAt": 1532803458796,
"vid": 101
}],
"merge-audits": [],
"properties": {
"first-name": {
"value": "hello"
},
"last-name": {
"value": "there",
},
"email": {
"value": "hello@there.com"
}
}
},
{
"contacts": [{
"addedAt": 1532803458796,
"vid": 101
}],
"merge-audits": [],
"properties": {
"first-name": {
"value": "Tom"
},
"last-name": {
"value": "Smith",
},
"email": {
"value": "tom@smith.com"
}
}
}
]
let r = json.map(x => ({
email: x.properties.email.value,
first_name: x.properties['first-name'].value,
last_name: x.properties['last-name'].value,
}));
console.log(r);
Комментарии:
1. Протестировано, отлично сработало и очень эффективно, спасибо!
Ответ №2:
Вы могли бы использовать деструктурирующее назначение для объекта и краткие свойства для сопоставления.
var data = [{ contacts: [{ addedAt: 1532803458796, vid: 101 }], "merge-audits": [], properties: { "first-name": { value: "hello" }, "last-name": { value: "there" }, email: { value: "hello@there.com" } } }],
result = data.map(({ properties: {
'first-name': { value: first_name },
'last-name': { value: last_name },
email: { value: email }
} }) => ({ first_name, last_name, email }));
console.log(result);
Комментарии:
1. Ваше решение также дает те же результаты. Спасибо за дополнительную информацию. Будет ли это также работать для нескольких объектов в переменной data?
2. это так, потому что данные представляют собой массив, и преобразуется каждый одинаковый организованный объект.