【问题标题】:How to copy data from old json to new json in javascript?如何在javascript中将数据从旧json复制到新json?
【发布时间】:2019-09-13 09:05:33
【问题描述】:

我有一个 json。如果提供者是“AXIS DATA”,我需要将“数据”的内容复制到新的 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"
        }
    ]
}

【问题讨论】:

  • hasilsearching = hasildata.data[i]; 应该是hasilsearching['data'][] = hasildata.data[i];

标签: javascript arrays json object


【解决方案1】:

hasilsearchingdata 属性添加一个空数组,并在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; }

【讨论】:

  • 谢谢你的回答,它的工作。使用过滤器很棒。
  • 嘿,抱歉回复晚了。当我在上面的答案中使用过滤器时,我收到一条警告消息。它说'解构绑定'在 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)));
        }
      }
      

      【讨论】:

      • 这行不通 - myjson.data 是一个对象数组,而不是单个对象。这就是为什么需要某种循环的原因。
      • @JackBashford 谢谢你指出,我更新了我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多