Linux下如何修改JSON文件键值并添加新键值对?
嘿,刚好我对Linux下处理JSON的操作很熟,这就帮你搞定需求!
首先得提个小细节:你的原始JSON有两处语法问题,得先修正才能用工具正常处理——Actionchecked里的"savecheck" : true,末尾多了个逗号(JSON里最后一个键值对不能带逗号),而且JSON不支持//注释,所以User里的注释要删掉。修正后的有效JSON应该是这样:
{ "Name" : "username", "Actionchecked" : { "Enablecheck" : true, "savecheck" : true }, "User" : {} }
接下来,咱们用jq这个专门处理JSON的工具来完成修改,这是Linux下处理JSON的首选,比sed/awk靠谱多了,完全不用担心破坏JSON结构。
1. 先安装jq(如果还没装)
根据你的Linux发行版选对应的命令:
- Debian/Ubuntu系列:
sudo apt update && sudo apt install jq - RHEL/CentOS系列:
sudo yum install jq - Fedora:
sudo dnf install jq
2. 执行修改命令
假设你的原始文件叫input.json,推荐先输出到新文件验证效果,没问题再替换原文件:
只添加顶级的Authentication键值对
jq '.Authentication = {"foo": true, "poo": false}' input.json > output.json
同时添加Authentication和User里的newuser
如果你说的newuser是要加到User对象里(比如设置值为"newpass"),可以合并成一条命令:
jq '.Authentication = {"foo": true, "poo": false} | .User.newuser = "newpass"' input.json > output.json
直接修改原文件(谨慎操作)
要是确认修改逻辑没问题,想直接覆盖原文件,用-i参数(原地编辑)就行:
jq -i '.Authentication = {"foo": true, "poo": false} | .User.newuser = "newpass"' input.json
简单解释下命令
.Authentication = {...}:给JSON的顶级对象添加Authentication键,值就是你要的那个包含foo和poo的对象|:管道符,把前一步的处理结果传给后一步继续操作.User.newuser = "newpass":在User对象里新增newuser键值对,你可以把"newpass"改成任何你需要的值
这样处理完,你的JSON就完全符合预期结构啦!
内容的提问来源于stack exchange,提问作者ludo
相关产品推荐
相关产品推荐

