首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用一条命令删除所有目标json字段

用一条命令删除所有目标json字段
EN

Stack Overflow用户
提问于 2018-06-04 19:05:02
回答 3查看 372关注 0票数 1

我想知道是否可以使用单行命令(例如使用sed)删除所有符合给定条件的JSON字段。如果不能使用一行程序,我希望使用最简单/最小的方法。

例如:我决定不再需要"id“字段。

输入JSON文件:

代码语言:javascript
复制
{ 
   "games": [
      {"id": "1","name": "Mario", "game": "nintendo"},
      {"id": "2","name": "Luigi", "game": "nintendo"},
      {"id": "3","name": "Sonic", "game": "sega"}
    ]
}

预期输出:

代码语言:javascript
复制
{ 
    "games": [
       {"name": "Mario", "game": "nintendo"},
       {"name": "Luigi", "game": "nintendo"},
       {"name": "Sonic", "game": "sega"}
     ]
}

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2018-06-04 19:24:34

你可以使用jq,你有很多选择,例如:

  • Whitelisting所需的属性:

猫游戏| jq '[.games[] |{ games.json,games[]}]‘

jq>play.

  • Blacklisting上查看您不想要的属性:

cat games.json | jq '[.games[] | del(.id)]‘

jq>play.

  • Traversing整个树上查看此操作,以删除匹配的属性:

cat games.json | jq 'del(..|.id?)‘

jq>play.上查看实际操作

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 19:16:27

使用foreach方法并在循环中删除:

代码语言:javascript
复制
let obj = JSON.parse ( yourJson );

Object.keys(obj).forEach( (key) => { 

    delete obj[key]; 

});

yourJson = JSON.stringify( obj );
票数 0
EN

Stack Overflow用户

发布于 2018-06-04 20:22:43

我能够弄清楚如何使用sed来做到这一点。以下命令适用于上面的示例:

代码语言:javascript
复制
sed 's/\("id":\).*\("name\)/\2/' games.json

这是如何工作的:

代码语言:javascript
复制
sed 's/\(FROM\).*\(UNTIL\)/FROM_INCLUSIVE UNTIL_INCLUSIVE/' input_file

此命令将位于来自的中的字符串和UNTIL中的字符串之间的所有内容替换为空字符串。然后我们可以指定是否应该保留这些字符串:\1将保留来自中的字符串,\2将保留直到,省略表示排除。在上面的示例中,我们要删除存在于名称“id”:“”之间的所有内容,同时排除前者(没有\1),包括后者(有\2)。

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

https://stackoverflow.com/questions/50679123

复制
相关文章

相似问题

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