【问题标题】:jq converting some json keys into csvjq 将一些 json 键转换为 csv
【发布时间】:2017-07-10 05:21:11
【问题描述】:

我有如下所示的 json 文本

 {
  "requires_mfa_code": false,
  "key_vault": false,
  "id": 100442,
  "slug": "spredfns",
  "name": "Spredfns",
  "**provider**": {
    "icons": {
      "first_letter": "s",
      "color_code": "65c6bb",
      "large": "https://assetsedfast_lg.png",
      "small": "https://assets.dfast_sm.png"
    },
    "**capabilities**": {
      "has_ou": false,
      "has_import": false,
      "has_password_reset": false,
      "has_provision": false,
      "has_saml": false,
      "has_sync": false,
      "unsupported_browsers": [],
      "services": "authenticatab

我在解析功能和提供者等类别文本标题时遇到问题。我只能获取 requires_mfa_code 和 id 和名称。我的代码如下:

 curl  https://www.example.com/api/v2/organizations/78762/installations?page=1 > test.txt; cat test.txt | jq '.[] | "\(.id) \(.name)" '

有人可以帮忙吗?我想获得 provider/color_code

目标低于

id     slug     provider color_code
100442 spredfns    65c6bb

【问题讨论】:

    标签: json nested export-to-csv jq data-extraction


    【解决方案1】:

    问题的标题提到了 CSV,所以我将首先说明如何使用 @csv 生成有效的 CSV。

    根据您的输入(更正以使其成为有效的 JSON),调用:

    jq -r '[.id, .slug, ."**provider**"."icons"."color_code" ] | @csv'
    

    产生:

    100442,"spredfns","65c6bb"
    

    避免使用引号

    如果您不想在输出中包含引号,那么您可以使用字符串插值,就像在原始帖子中一样。如果您的 jq 支持 @tsv,那么另一种方法是使用它而不是 @csv;输出将是:

    100442  spredfns    65c6bb
    

    包括标题

    可以像这样包含标题:

    (["id", "slug", "provider color_code"],
     [.id, .slug, ."**provider**"."icons"."color_code" ])
    | @tsv
    

    在这种情况下,输出将是:

    id  slug    provider color_code
    100442  spredfns    65c6bb
    

    jq 的旧版本

    如果您使用的 jq 版本不支持 ."foo" 语法,请改用主要的 .["foo"] 语法,记住创建管道:

     [.id, .slug, (.["**provider**"] | .["icons"] | .["color_code"]) ]
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2022-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多