#javascript #arrays #json #object
#javascript #массивы #json #объект
Вопрос:
у меня есть json. мне нужно скопировать содержимое «данных», если поставщиком являются «ДАННЫЕ ОСИ», в новый файл json. Как?
то, что я пробовал, это
сначала я конвертирую с помощью json.parse
и ищу его с помощью цикла for.
пока это мой код
var hasilsearching = {};
var hasildata = JSON.parse( FIRST JSON );
for (var i=0 ; i < hasildata.data.length ; i ){
if (hasildata.data[i].provider == "AXIS DATA") {
hasilsearching = hasildata.data[i];
}
}
но не то, что я ожидал. Я знаю, что проблема внутри if()
. но я не знаю.
это мой файл json
{
"errNumber": "0",
"userID": "EKL0003097",
"data": [
{
"code": "BXD1",
"price": "15000.00",
"name": "Voucher Axis Aigo 1GB 24J 30H",
"ep": "770",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
},
{
"code": "BXD2",
"price": "25000.00",
"name": "Voucher Axis Aigo 2GB 24J 30H",
"ep": "660",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
},
{
"code": "BOLT1",
"price": "31000.00",
"name": "Bolt Kuota 1,5GB 24Jam 30hr",
"ep": "1320",
"isActive": "Active",
"type": "KUOTA",
"provider": "BOLT"
},
{
"code": "BOLT3",
"price": "50000.00",
"name": "Bolt Kuota 3GB 24Jam 30hr",
"ep": "1127",
"isActive": "Active",
"type": "KUOTA",
"provider": "BOLT"
}
],
"respMessage": "PROSES BERHASIL"
}
это ожидаемый новый файл json
{
"data": [
{
"code": "BXD1",
"price": "15000.00",
"name": "Voucher Axis Aigo 1GB 24J 30H",
"ep": "770",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
},
{
"code": "BXD2",
"price": "25000.00",
"name": "Voucher Axis Aigo 2GB 24J 30H",
"ep": "660",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
}
]
}
Комментарии:
1.
hasilsearching = hasildata.data[i];
должно бытьhasilsearching['data'][] = hasildata.data[i];
Ответ №1:
Добавьте пустой массив в data
свойство hasilsearching
и push
любые совпадения на:
var hasildata = {"errNumber":"0","userID":"EKL0003097","data":[{"code":"BXD1","price":"15000.00","name":"Voucher Axis Aigo 1GB 24J 30H","ep":"770","isActive":"Active","type":"KUOTA","provider":"AXIS DATA"},{"code":"BXD2","price":"25000.00","name":"Voucher Axis Aigo 2GB 24J 30H","ep":"660","isActive":"Active","type":"KUOTA","provider":"AXIS DATA"},{"code":"BOLT1","price":"31000.00","name":"Bolt Kuota 1,5GB 24Jam 30hr","ep":"1320","isActive":"Active","type":"KUOTA","provider":"BOLT"},{"code":"BOLT3","price":"50000.00","name":"Bolt Kuota 3GB 24Jam 30hr","ep":"1127","isActive":"Active","type":"KUOTA","provider":"BOLT"}],"respMessage":"PROSES BERHASIL"};
var hasilsearching = { data: [] };
for (var i=0 ; i < hasildata.data.length ; i ){
if (hasildata.data[i].provider == "AXIS DATA") {
hasilsearching.data.push(hasildata.data[i]);
}
}
console.log(hasilsearching);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Это также намного проще в использовании filter
:
var hasildata = {"errNumber":"0","userID":"EKL0003097","data":[{"code":"BXD1","price":"15000.00","name":"Voucher Axis Aigo 1GB 24J 30H","ep":"770","isActive":"Active","type":"KUOTA","provider":"AXIS DATA"},{"code":"BXD2","price":"25000.00","name":"Voucher Axis Aigo 2GB 24J 30H","ep":"660","isActive":"Active","type":"KUOTA","provider":"AXIS DATA"},{"code":"BOLT1","price":"31000.00","name":"Bolt Kuota 1,5GB 24Jam 30hr","ep":"1320","isActive":"Active","type":"KUOTA","provider":"BOLT"},{"code":"BOLT3","price":"50000.00","name":"Bolt Kuota 3GB 24Jam 30hr","ep":"1127","isActive":"Active","type":"KUOTA","provider":"BOLT"}],"respMessage":"PROSES BERHASIL"};
var hasilsearching = { data: hasildata.data.filter(({ provider }) => provider == "AXIS DATA") };
console.log(hasilsearching);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Комментарии:
1. спасибо за ответ, это сработало. Использовать фильтр — это здорово.
2. привет, извините за поздний ответ. Когда я использую filter в ответе выше, я получаю предупреждающее сообщение. В нем говорится, что ‘деструктурирующая привязка’ доступна в ES6 (используйте ‘esversion: 6’), а ‘синтаксис функции стрелки (=>)’ доступен только в ES6 (используйте ‘esversion: 6’) как я избавляюсь от этого предупреждения?
Ответ №2:
Вы можете просто фильтровать свои данные таким образом:
let filteredData = hasildata.data.filter(x => x.provider=='AXIS DATA');
Ответ №3:
Используя цикл forEach
var data={
"errNumber": "0",
"userID": "EKL0003097",
"data": [
{
"code": "BXD1",
"price": "15000.00",
"name": "Voucher Axis Aigo 1GB 24J 30H",
"ep": "770",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
},
{
"code": "BXD2",
"price": "25000.00",
"name": "Voucher Axis Aigo 2GB 24J 30H",
"ep": "660",
"isActive": "Active",
"type": "KUOTA",
"provider": "AXIS DATA"
},
{
"code": "BOLT1",
"price": "31000.00",
"name": "Bolt Kuota 1,5GB 24Jam 30hr",
"ep": "1320",
"isActive": "Active",
"type": "KUOTA",
"provider": "BOLT"
},
{
"code": "BOLT3",
"price": "50000.00",
"name": "Bolt Kuota 3GB 24Jam 30hr",
"ep": "1127",
"isActive": "Active",
"type": "KUOTA",
"provider": "BOLT"
}
],
"respMessage": "PROSES BERHASIL"
}
var d={data:[]}
data.data.forEach(e=>{
if(e.provider=="AXIS DATA")
d.data.push(e)
})
Ответ №4:
если вы хотите поместить свои поля в массив, используйте следующее :
var data = [];
for(var el of myjson.data){
if(el.provider === "AXIS DATA"){
data.push(JSON.parse(JSON.stringify(el)));
}
}
Комментарии:
1. Это не сработает —
myjson.data
это массив объектов , а не отдельный объект. Вот почему требуется какой-то цикл.2. @JackBashford спасибо, что указали на это, я обновил свой ответ