首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从json文档中提取特定行?

如何从json文档中提取特定行?
EN

Stack Overflow用户
提问于 2022-09-12 16:01:05
回答 6查看 125关注 0票数 1

我有一个包含数千行和90个json对象的json文件。每个对象都有以下结构:

代码语言:javascript
复制
{
        "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行?

代码语言:javascript
复制
 "name": "Barclaycard (UK) - Online Banking: Personal",
 "name": "Metro Bank - Commercial and Business Online Plus",
 ...
 ...

 "name": "HSBC (UK) - Business",
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2022-09-12 16:13:47

如果必须使用代码编辑器,则可以在Vim中删除与::v/^\s*"name":/d模式不匹配的所有行。

上面的模式是:

  • ^行以
  • \s*零或多个空白
  • "name:" (很好的解释)

尽管最好使用专用工具来解析json文件,而不是使用regex作为json不是一种“常规语言”.

奖金

如果你在Vim中做完,你可以用左对齐完成所有的行,做:%left,甚至只做:%le

票数 3
EN

Stack Overflow用户

发布于 2022-09-12 20:21:27

这听起来不像是文本编辑器的工作,甚至是正则表达式的工作。如何为作业™使用正确的工具?

代码语言:javascript
复制
# 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中,它应该是这样的:

代码语言:javascript
复制
:%!jq '.[] | .name'

:help filter

FWIW,这是另一个适合作业™的工具

代码语言:javascript
复制
:%!jj \\#.name -l

https://github.com/tidwall/jj

票数 2
EN

Stack Overflow用户

发布于 2022-09-12 16:16:25

您最终可以使用grep:

grep '^\s*"name":' your_file.json

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

https://stackoverflow.com/questions/73692083

复制
相关文章

相似问题

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