jq将一些json密钥转换为csv

时间:2017-07-10 05:21:12

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

我的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和name.My代码如下:

 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

1 个答案:

答案 0 :(得分:0)

问题的标题提到了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"]) ]