首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在所有级别重命名JSON嵌套对象中的键?

如何在所有级别重命名JSON嵌套对象中的键?
EN

Stack Overflow用户
提问于 2019-03-29 20:30:43
回答 2查看 497关注 0票数 0
代码语言:javascript
复制
{
  "ID": "5c9b2de495e8d81ef437539e",
  "WeightingFactor": "BIC",
  "TargetAmount": 1000,
  "FilterCondition": {
    "_cls": "ComplexFilter",
    "Condition": "AND",
    "Rules": [{
        "_cls": "Filter",
        "Field": "MOODYSFOREIGNCURRENCYCEILINGRATING",
        "Operator": "in list",
        "Value": "A1,A2,A3"
      },
      {
        "_cls": "Filter",
        "Field": "ASOFDATE",
        "Operator": "less or equal",
        "Value": "26 Nov 2028"
      },
      {
        "_cls": "ComplexFilter",
        "Condition": "OR",
        "Rules": [{
            "_cls": "Filter",
            "Field": "ASOFDATE",
            "Operator": "less or equal",
            "Value": "26 Nov 2028"
          },
          {
            "_cls": "Filter",
            "Field": "ASOFDATE",
            "Operator": "less or equal",
            "Value": "26 Nov 2029"
          }
        ]
      }
    ],
    "Not": false
  }
}

需要将"field"重命名为category everywhere。请建议如何使用任何可用的方法?

已尝试stringifyreplace。但它不起作用

预期输出:

代码语言:javascript
复制
{
  "ID": "5c9b2de495e8d81ef437539e",
  "WeightingFactor": "BIC",
  "TargetAmount": 1000,
  "FilterCondition": {
    "_cls": "ComplexFilter",
    "Condition": "AND",
    "Rules": [{
        "_cls": "Filter",
        "Category": "MOODYSFOREIGNCURRENCYCEILINGRATING",
        "Operator": "in list",
        "Value": "A1,A2,A3"
      },
      {
        "_cls": "Filter",
        "Category": "ASOFDATE",
        "Operator": "less or equal",
        "Value": "26 Nov 2028"
      },
      {
        "_cls": "ComplexFilter",
        "Condition": "OR",
        "Rules": [{
            "_cls": "Filter",
            "Category": "ASOFDATE",
            "Operator": "less or equal",
            "Value": "26 Nov 2028"
          },
          {
            "_cls": "Filter",
            "Category": "ASOFDATE",
            "Operator": "less or equal",
            "Value": "26 Nov 2029"
          }
        ]
      }
    ],
    "Not": false
  }
}
EN

回答 2

Stack Overflow用户

发布于 2019-03-29 20:33:51

您可以在给定的JSON字符串中将字符串"field":替换为"category":

代码语言:javascript
复制
var json = JSON.stringify({ field: { field: 'foo' } }),
    newJSON = json.replace(/"field":/g, '"category":');

console.log(JSON.parse(newJSON));

经典的替代品

代码语言:javascript
复制
function replace(object, source, target) {
    return Object.assign(...Object.entries(object).map(([k, v]) => ({
        [k === source ? target : k]: v && typeof v === 'object'
            ? replace(v, source, target)
            : v
    })));
}

var object = { field: { field: 'foo' } },
    newObject = replace(object, 'field', 'category');

console.log(newObject);

票数 5
EN

Stack Overflow用户

发布于 2019-03-29 21:18:28

我在Regex上运行了一个性能测试,替换一个键与深度遍历一个JSON对象,并替换一个键,结果发现Regex方法比深度遍历方法慢65%。

下面是以深度遍历的方式完成此操作的代码:

代码语言:javascript
复制
function deepTraverseAndReplace(o,sk,rk) {
    for (var key in o) {
        if (o[key ] !== null && typeof(o[key])=="object") {
            traverse(o[key],sk,rk);
        } else if( key == sk ) {
            o[rk] = o[key];
            delete(o[key]);
        }
    }
}



deepTraverseAndReplace(jsonObj,'Field','Category')

下面是create jsPerf的链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55417490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档