如何删除json对象键和值。?

Posted

技术标签:

【中文标题】如何删除json对象键和值。?【英文标题】:how to remove json object key and value.? 【发布时间】:2018-03-17 21:25:55 【问题描述】:

我有一个 json 对象,如下所示。我想通过使用下面不起作用的代码来删除“otherIndustry”条目及其值。

var updatedjsonobj = delete myjsonobj['otherIndustry'];

如何删除 Json 对象的特定键及其值。 下面是我要删除“otherIndustry”键及其值的示例 json 对象。

var myjsonobj =  
      "employeeid": "160915848",
      "firstName": "tet",
      "lastName": "test",
      "email": "test@email.com",
      "country": "Brasil",
      "currentIndustry": "aaaaaaaaaaaaa",
      "otherIndustry": "aaaaaaaaaaaaa",
      "currentOrganization": "test",
      "salary": "1234567"
    ;
delete myjsonobj ['otherIndustry'];
console.log(myjsonobj);

日志仍然打印相同的对象而不从对象中删除“otherIndustry”条目。

【问题讨论】:

Remove key-value pair from JSON object的可能重复 你的代码应该可以工作,你能创建一个MVCE吗***.com/help/mcve 删除 myObj.other.key1; As shown in this example. 没用 结果如何?你能解释一下吗? 不@Alexandru-IonutMihai,实际上我的代码是var myjsonobj = "employeeid": "160915848", "firstName": "tet", "lastName": "test", "email": "test@email.com", "country": "Brasil", "currentIndustry": "aaaaaaaaaaaaa", "otherIndustry": "aaaaaaaaaaaaa", "currentOrganization": "test", "salary": "1234567" ; delete myjsonobj ['otherIndustry']; console.log(myjsonobj ); 仍然打印相同的对象。 :( 【参考方案1】:

delete 运算符用于remove 对象property

delete运算符返回新对象,只返回booleantruefalse

另一方面,解释器执行 var updatedjsonobj = delete myjsonobj['otherIndustry']; 后,updatedjsonobj 变量将存储一个 boolean 价值。

如何删除 Json 对象的特定键及其值?

您只需要知道属性名称即可将其从对象的属性中删除。

delete myjsonobj['otherIndustry'];

let myjsonobj = 
  "employeeid": "160915848",
  "firstName": "tet",
  "lastName": "test",
  "email": "test@email.com",
  "country": "Brasil",
  "currentIndustry": "aaaaaaaaaaaaa",
  "otherIndustry": "aaaaaaaaaaaaa",
  "currentOrganization": "test",
  "salary": "1234567"

delete myjsonobj['otherIndustry'];
console.log(myjsonobj);

如果您想在知道值后删除key,可以使用Object.keys 函数,该函数返回给定对象自己的可枚举属性的数组。

let value="test";
let myjsonobj = 
      "employeeid": "160915848",
      "firstName": "tet",
      "lastName": "test",
      "email": "test@email.com",
      "country": "Brasil",
      "currentIndustry": "aaaaaaaaaaaaa",
      "otherIndustry": "aaaaaaaaaaaaa",
      "currentOrganization": "test",
      "salary": "1234567"

Object.keys(myjsonobj).forEach(function(key)
  if (myjsonobj[key] === value) 
    delete myjsonobj[key];
  
);
console.log(myjsonobj);

【讨论】:

所以不管返回值如何,key:value 是否会按照 OP 的代码从对象中删除? 你也可以使用点符号:delete myjsonobj.otherIndustry;【参考方案2】:

有几种方法可以做到这一点,让我们一一看看:

    删除方法:最常用的方法

const myObject = 
    "employeeid": "160915848",
    "firstName": "tet",
    "lastName": "test",
    "email": "test@email.com",
    "country": "Brasil",
    "currentIndustry": "aaaaaaaaaaaaa",
    "otherIndustry": "aaaaaaaaaaaaa",
    "currentOrganization": "test",
    "salary": "1234567"
;

delete myObject['currentIndustry'];
// OR delete myObject.currentIndustry;
  
console.log(myObject);
    通过使键值未定义:替代和更快的方法:

let myObject = 
    "employeeid": "160915848",
    "firstName": "tet",
    "lastName": "test",
    "email": "test@email.com",
    "country": "Brasil",
    "currentIndustry": "aaaaaaaaaaaaa",
    "otherIndustry": "aaaaaaaaaaaaa",
    "currentOrganization": "test",
    "salary": "1234567"
  ;

myObject.currentIndustry = undefined;
myObject = JSON.parse(JSON.stringify(myObject));

console.log(myObject);
    使用 es6 spread 运算符:

const myObject = 
    "employeeid": "160915848",
    "firstName": "tet",
    "lastName": "test",
    "email": "test@email.com",
    "country": "Brasil",
    "currentIndustry": "aaaaaaaaaaaaa",
    "otherIndustry": "aaaaaaaaaaaaa",
    "currentOrganization": "test",
    "salary": "1234567"
;


const currentIndustry, ...filteredObject = myObject;
console.log(filteredObject);

或者如果你可以使用 underscore js 库的 omit()

const filteredObject = _.omit(currentIndustry, 'myObject');
console.log(filteredObject);

什么时候用什么?

如果您不想创建新的过滤对象,只需选择选项 1 或 2。确保使用 let 定义对象,同时使用第二个选项,因为我们将覆盖价值观。或者你可以使用其中任何一个。

希望这会有所帮助:)

【讨论】:

好方法:)【参考方案3】:

按照这个,它可以像你在看的那样:

var obj = 
    Objone: 'one',
    Objtwo: 'two'
;

var key = "Objone";
delete obj[key];
console.log(obj); // prints  "objtwo": two

【讨论】:

【参考方案4】:

这里还有一个例子。 (查看reference

const myObject = 
  "employeeid": "160915848",
  "firstName": "tet",
  "lastName": "test",
  "email": "test@email.com",
  "country": "Brasil",
  "currentIndustry": "aaaaaaaaaaaaa",
  "otherIndustry": "aaaaaaaaaaaaa",
  "currentOrganization": "test",
  "salary": "1234567"
;
const otherIndustry, ...otherIndustry2 = myObject;
console.log(otherIndustry2);
.as-console-wrapper 
  max-height: 100% !important;
  top: 0;

【讨论】:

【参考方案5】:

我在尝试删除返回的 JSON 对象时遇到问题,发现它实际上是一个字符串。如果您在删除之前使用 JSON.parse(),则可以确定您的密钥将被删除。

let obj;
console.log(this.getBody()); // "AED":3.6729,"AZN":1.69805,"BRL":4.0851
obj = this.getBody();
delete obj["BRL"];
console.log(obj) // "AED":3.6729,"AZN":1.69805,"BRL":4.0851
obj = JSON.parse(this.getBody());
delete obj["BRL"];
console.log(obj) // "AED":3.6729,"AZN":1.69805

【讨论】:

【参考方案6】:
function omit(obj, key) 
    const [key]:ignore, ...rest = obj;
    return rest;

您可以像这样使用 ES6 扩展运算符。要删除您的密钥,只需调用

const newJson = omit(myjsonobj, "otherIndustry");

javascript中处理type=object时保持纯函数总是更好。

【讨论】:

以上是关于如何删除json对象键和值。?的主要内容,如果未能解决你的问题,请参考以下文章

Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值

使用函数中的变量删除对象的键和值

如何使用键和值创建json对象,其中value是数组

如何比较两个json文件并在对象中返回不匹配的键和值

$.ajax 从 php 获取 json_encode($arr) 之后的对象,但是如何在 jQuery 中获取键和值?

使用javascript删除与对象的另一个键和值对相对应的对象数组中的重复项