【问题标题】:Parse JSON file in linux using jq使用 jq 在 linux 中解析 JSON 文件
【发布时间】:2018-04-13 01:28:24
【问题描述】:

我有一个 json 文件,叫它 x.json 满足这个模式:

 }
      },
      "type": "persons"
    },
    "person's in a group": {
      "primary": {
        "attributes": {
          "firstname": "sara",
          "lastname": "jones",
          "age": "32",
          "weight": "130",

要获得名字列表,我必须写:

cat x.json | jq '.title[].type[].properties.firstname'

有没有更短的方法来获取名字?而不必编写整行对象? 还有一种方法不仅可以列出名字,例如名字和姓氏吗? 最后,知道如何将其导入 CVS 文件或任何其他平面文件系统吗?

【问题讨论】:

    标签: json linux file unix jq


    【解决方案1】:

    我以多种方式编辑了您的问题。你提供了一个模式,而不是一个例子。我也认为您的意思是命令jq,而不是jd

    我还假设您必须解析一个包含此类人员列表的文件,而不仅仅是一个人。

    使用 jq,你可以运行这个

    echo '
    [{
      "firstName": "sin",
      "lastName": "minim sint labore"
    },
    {
      "firstName": "mun",
      "lastName": "minim sint labore"
    }]' >> x.json
    
    cat x.json | jq '.[].firstName'
    "sin"
    "mun"
    

    jq有更多的选项可以在their documentation找到,比如:

    $ jq -c '.[] | [.firstName, .lastName]' x.json
    ["sin","minim sint labore"]
    ["mun","minim sint labore"]
    

    要将此类或其他 JSON 输出转换为 CSV,请查看文档,或使用 google 或 Stackoverflow。

    【讨论】:

    • 我相信从字面上看,给定的模式通常会被解释为匹配单个 JSON 对象,而不是 JSON 对象数组。具体见cswr.github.io/JsonSchema/spec/arrays
    • 这很有可能,但不确定如何处理 OPs 架构。问题文本是指“名字列表”,所以我假设 OP 模式仅描述列表的元素。
    • 你对对象数组是正确的,所以我实际上已经调整了我的示例以匹配我的代码。
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2020-11-07
    相关资源
    最近更新 更多