【问题标题】:How to delete nested json key dynamically?如何动态删除嵌套的json键?
【发布时间】:2016-08-11 07:43:05
【问题描述】:

这是示例 json:

{
"search": {
"facets": {
  "author": [

  ],
  "language": [
    {
      "value": "nep",
      "count": 3
    },
    {
      "value": "urd",
      "count": 1
    }
  ],
  "source": [
    {
      "value": "West Bengal State Council of Vocational Education & Training",
      "count": 175
    }
  ],
  "type": [
    {
      "value": "text",
      "count": 175
    }
  ],
  }
 }

删除键search.facets.source有几种方法:

  1. delete search.facets.source
  2. delete jsobObj['search']['facets']['source']
  3. var jsonKey = 'source'; JSON.parse(angular.toJson(jsonObj), function (key, value) { if (key != jsonKey) return value; });

1 和 2 以上不是动态的,3 是其中一种方式,但不是正确的方式。因为如果源存在于另一个节点中,那么它将不起作用。请任何人都可以告诉我如何在任何类型的嵌套键中动态删除它。因为我们不能在上面2中动态生成数组序列。

【问题讨论】:

  • “动态”到底是什么意思?动态基于什么?您想将什么输入转化为删除操作?
  • 动态的意思是,我想要一个函数,无论我将密钥和jsonObj传递给函数,我都想要一个函数,它会在删除密钥后返回json,你能提供一个完整的函数吗。

标签: javascript angularjs json


【解决方案1】:

假设你是从这里开始的:

let path = 'search.facets.source';

那么逻辑很简单:找到search.facets对象,然后delete obj['source']就可以了。

第一步,将path分为初始路径和尾部属性名:

let keys = path.split('.');
let prop = keys.pop();

在您的对象中找到facets 对象:

let parent = keys.reduce((obj, key) => obj[key], jsonObj);

删除属性:

delete parent[prop];

【讨论】:

    【解决方案2】:

    我找到了另一种解决方案,很简单。

    var jsonKey = 'search.facets.source';
    eval('delete jsonObj.' + jsonKey + ';');
    

    【讨论】:

    • 请不要使用eval。曾经。正确地做到这一点并没有那么复杂。
    猜你喜欢
    • 2021-09-01
    • 2017-09-27
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多