我有一个包含数千行和90个json对象的json文件。每个对象都有以下结构:
{
"country_codes": [
"GB"
],
"institution_id": "ins_118309",
"name": "Barclaycard (UK) - Online Banking: Personal", // I want to extract this line only
"oauth": true,
"products": [
"assets",
"auth",
"balance",
"transactions",
"identity",
"standing_orders"
],
"routing_numbers": []
},对于这90个对象,我想删除所有的行,只保留一个机构的名称。
我想我得用正则表达式了?我很乐意使用vim,崇高,vscode或任何其他代码编辑器来分配我这样做
如何提取这些行,以便保留以下90行?
"name": "Barclaycard (UK) - Online Banking: Personal",
"name": "Metro Bank - Commercial and Business Online Plus",
...
...
"name": "HSBC (UK) - Business",发布于 2022-09-12 16:13:47
如果必须使用代码编辑器,则可以在Vim中删除与::v/^\s*"name":/d模式不匹配的所有行。
上面的模式是:
^行以\s*零或多个空白"name:" (很好的解释)尽管最好使用专用工具来解析json文件,而不是使用regex作为json不是一种“常规语言”.
奖金
如果你在Vim中做完,你可以用左对齐完成所有的行,做:%left,甚至只做:%le。
发布于 2022-09-12 20:21:27
这听起来不像是文本编辑器的工作,甚至是正则表达式的工作。如何为作业™使用正确的工具?
# print only the desired fields to stdout
$ jq '.[] | .name' < in.json
# write only the desired fields to file
$ jq '.[] | .name' < in.json > out.json见https://stedolan.github.io/jq/。
如果您真的想从文本编辑器中执行此操作,最简单的方法仍然是通过专门的外部工具过滤当前的缓冲区。在Vim中,它应该是这样的:
:%!jq '.[] | .name'见:help filter。
FWIW,这是另一个适合作业™的工具
:%!jj \\#.name -l发布于 2022-09-12 16:16:25
您最终可以使用grep:
grep '^\s*"name":' your_file.json
https://stackoverflow.com/questions/73692083
复制相似问题