【问题标题】:use jq to format json data into csv data使用jq将json数据格式化成csv数据
【发布时间】:2021-04-30 19:51:05
【问题描述】:
{
    "Users": [
        {
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "1"
                },
                {
                    "Name": "phone_number",
                    "Value": "1234"
                },
                {
                    "Name": "referral_code",
                    "Value": "abc"
                }
            ]
        },
        {
            "Attributes": [
                {
                    "Name": "sub",
                    "Value": "2"
                },
                {
                    "Name": "phone_number",
                    "Value": "5678"
                },
                {
                    "Name": "referral_code",
                    "Value": "def"
                }
            ]
        }
    ]
}

我怎样才能产生如下输出?

1,1234,abc

2,5678,定义

jq '.Users[] .Attributes[] .Value' test.json

produces


1
1234
abc
2
5678
def

【问题讨论】:

  • 我没有投反对票,但我相当确定主要原因是您没有表现出任何“研究努力”,例如一次失败的尝试。 (参见例如meta.stackoverflow.com/q/261592)此外,您没有指定是否保证 Attributes 中 Name 值的顺序。

标签: json export-to-csv jq


【解决方案1】:

不确定这是处理此问题的最简洁方法,但以下将获得所需的输出:

.Users[].Attributes | map(.Value) | @csv
  1. 循环遍历所有深层属性.Users[].Attributes
  2. map() 获取所有Value
  3. 转换为@csv

jqPlay demo

【讨论】:

    【解决方案2】:

    如果您不需要保证输出为 CSV,并且您确定“名称”值以相同的顺序显示,您可以选择:

    .Users[].Attributes
    | from_entries
    | [.[]]
    | join(",")
    

    为了安全起见,最好确保顺序的一致性:

    (.Users[0] | [.Attributes[] | .Name]) as $keys
    | .Users[]
    | .Attributes
    | from_entries
    | [.[ $keys[] ]]
    | join(",")
    

    使用join(",") 将生成逗号分隔的值,如 Q 中所示(不带引号),但不保证为输入的所有有效值生成预期的 CSV。如果您不介意讨厌的引号,可以使用@csv,或者如果您想跳过所有数值周围的引号:

    map(tonumber? // .) | @csv
    

    【讨论】:

    • 我赞成一致的订购选择,除非您没有按要求生成 CSV。
    • @ikegami - 我使用 join(",") 精确地符合请求,但更新了 A 以提供更多细节和选项。
    猜你喜欢
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2014-12-28
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多