如何查找和替换 JSON 中的值?

新手上路,请多包涵

我有一个这样的对象:

 {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
}

我需要找到所有“名称”键并仅当它以“测试名称”开头时才替换其值,然后返回新的 JSON 对象:

 {
  "responses": {
    "firstKey": {
      "items": {
        "name": "N/A"
      }
    },
    "anotherKey": {
      "items": {
        "name": "N/A"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
}

问题是键在对象中不一致,即“firstKey”、“secondKey”……我尝试了 ForEach,但它似乎太麻烦了……所以我需要 lodash 或 vanila JavaScript 来替换值。

原文由 John Glabb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 796
2 个回答

做这样的事情。使用正则表达式转换为字符串替换(也将键添加到正则表达式),然后再转换回来。


var data = {
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
};

var originalMsg = JSON.stringify(data);
console.log(data)
console.log(originalMsg)
var updatedMsg = originalMsg.replace(/test name [a-z]*/g, "N/A");
console.log(updatedMsg)
var newObj = JSON.parse(updatedMsg);
console.log(newObj);

原文由 PraveenB 发布,翻译遵循 CC BY-SA 4.0 许可协议

它也可以在解析期间完成:

 var json = `{
  "responses": {
    "firstKey": {
      "items": {
        "name": "test name one"
      }
    },
    "anotherKey": {
      "items": {
        "name": "test name two"
      }
    },
    "oneMoreKey": {
      "items": {
        "name": "John"
      }
    }
  }
}`

var obj = JSON.parse(json, (k, v) => k == 'name' && /^test name/.test(v) ? 'N/A' : v)

console.log( obj )

原文由 Slai 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题