【问题标题】:how to retrieve specific keys / values from json object and add into another json object in jQuery如何从 json 对象中检索特定的键/值并添加到 jQuery 中的另一个 json 对象中
【发布时间】:2020-07-29 02:15:48
【问题描述】:

我有一个如下的 json 对象:

var jsonData = [
{COUNTRY_NAME: "Belgium", COUNTRY_CODE: "BE", TERRITORY: "BENELUX", MARKET: "Benelux", REGION: "NORTH"},
{COUNTRY_NAME: "Italy", COUNTRY_CODE: "IT", TERRITORY: "ITALY", MARKET: "ITALY", REGION: "SOUTH"},
{COUNTRY_NAME: "Spain", COUNTRY_CODE: "SP", TERRITORY: "SPAIN", MARKET: "SPAIN", REGION: "SOUTH"},...
];

我想从jsonData 中的每个数组中提取特定键及其值(COUNTRY_NAMEREGION)所以我的最终结果应该如下:

var jsonFinal = [
{COUNTRY_NAME: "Belgium", REGION: "NORTH"},
{COUNTRY_NAME: "Italy", REGION: "SOUTH"},
{COUNTRY_NAME: "Spain", REGION: "SOUTH"},...
];

我可以让它工作,但我相信有更好的方法来做到这一点。我所做的是:

我遍历我的 json 对象中的每个数组并删除我不需要的键,但现在我的情况是我有多个键要删除并且不想一个一个地删除。

任何建议请我如何从 json 对象中提取特定键并添加到另一个 json 对象?非常感谢。

var jsonData = [
{COUNTRY_NAME: "Belgium", COUNTRY_CODE: "BE", TERRITORY: "BENELUX", MARKET: "Benelux", REGION: "NORTH"},
{COUNTRY_NAME: "Italy", COUNTRY_CODE: "IT", TERRITORY: "ITALY", MARKET: "ITALY", REGION: "SOUTH"},
{COUNTRY_NAME: "Spain", COUNTRY_CODE: "SP", TERRITORY: "SPAIN", MARKET: "SPAIN", REGION: "SOUTH"}
];



for (var i = 0; i < jsonData.length; i++) { 
       //console.log(jsonData[i]);
       delete jsonData[i]['COUNTRY_CODE'];
       delete jsonData[i]['TERRITORY'];
       delete jsonData[i]['MARKET'];
}

var finalJSON = jsonData;

console.log(finalJSON);       
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

现代 Javascript 中最简单的方法是使用 map 和对象解构:

var jsonData = [
  {COUNTRY_NAME: "Belgium", COUNTRY_CODE: "BE", TERRITORY: "BENELUX", MARKET: "Benelux", REGION: "NORTH"},
  {COUNTRY_NAME: "Italy", COUNTRY_CODE: "IT", TERRITORY: "ITALY", MARKET: "ITALY", REGION: "SOUTH"},
  {COUNTRY_NAME: "Spain", COUNTRY_CODE: "SP", TERRITORY: "SPAIN", MARKET: "SPAIN", REGION: "SOUTH"}
];

var transformed = jsonData.map(({ COUNTRY_NAME, REGION }) => ({ COUNTRY_NAME, REGION }));

console.log(transformed);

【讨论】:

  • 非常感谢。非常感谢。
  • 我还有一个关于您的解决方案的问题。您能否建议如何使用您的解决方案转义密钥中的特殊字符?这是我的 jsfiddle jsfiddle.net/f8Lr3yk4
  • 抱歉回复延迟。不幸的是,如果您的键不是有效的 JS 变量名,则不能使用相同的速记形式。但是您仍然可以使用“简写”形式,在其中为值指定键和名称(必然不同),例如:jsonData.map(({ COUNTRY_NAME, REGION, "order#": order }) =&gt; ({ COUNTRY_NAME, REGION, "order#": order }));
【解决方案2】:

您可以在不改变原始数组的情况下执行此操作。

var jsonData = [{
    COUNTRY_NAME: "Belgium",
    COUNTRY_CODE: "BE",
    TERRITORY: "BENELUX",
    MARKET: "Benelux",
    REGION: "NORTH"
  },
  {
    COUNTRY_NAME: "Italy",
    COUNTRY_CODE: "IT",
    TERRITORY: "ITALY",
    MARKET: "ITALY",
    REGION: "SOUTH"
  },
  {
    COUNTRY_NAME: "Spain",
    COUNTRY_CODE: "SP",
    TERRITORY: "SPAIN",
    MARKET: "SPAIN",
    REGION: "SOUTH"
  }
];

let newData = []
for (let v of jsonData) {
  newData.push({
    COUNTRY_NAME: v.COUNTRY_NAME,
    REGION: v.REGION
  })
}

console.log(newData);

【讨论】:

  • 非常感谢您的帮助
【解决方案3】:
var jsonData = [
{COUNTRY_NAME: "Belgium", COUNTRY_CODE: "BE", TERRITORY: "BENELUX", MARKET: "Benelux", REGION: "NORTH"},
{COUNTRY_NAME: "Italy", COUNTRY_CODE: "IT", TERRITORY: "ITALY", MARKET: "ITALY", REGION: "SOUTH"},
{COUNTRY_NAME: "Spain", COUNTRY_CODE: "SP", TERRITORY: "SPAIN", MARKET: "SPAIN", REGION: "SOUTH"}
];

 var finalData=[];
jsonData.forEach(buidFinalData);

function buidFinalData(item, index) {
  finalData.push({
  COUNTRY_NAME: item.COUNTRY_NAME, REGION: item.REGION
  })
}

console.log(finalData);

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 2023-01-28
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多