簡體   English   中英

如何使用保持數組結構的 jq 在 tsv 中使用數組轉換 JSON?

[英]How to convert a JSON with arrays in tsv with jq keeping the array structure?

我需要獲取一個 mysql 表的內容,該表具有一些將數據存儲為 JSON 數組的字段,並將其攝取到另一個數據庫表中。 我需要為此使用 REST API,它以 JSON 格式返回記錄。 出於性能原因,我需要該輸出為 tab tab return。 因此我使用 jq 的 @tsv。

這很有效,直到它遇到一個里面有一個 JSON 數組的字段,然后 jq 抱怨“數組在 csv 行中無效”。

這是一個 JSON 示例

{
"records": [
 {
        "id": 1,
        "metadata": {
            "description": null,
            "width": 0,
            "height": 0,
            "secondaryColor": "#fff",
            "callToAction": [
                {
                    "link": "/truc.html",
                    "value": "nice",
                    "colors": {
                        "primary": "transparent;",
                        "secondary": "transparent;"
                    }
                }
            ]
        },
        "parent": null
    }
        ]
}

我想要以下結果

1  null  0  0  #fff  [ { "link": "/truc.html", "value": "nice", "colors": { "primary": "transparent;", "secondary": "transparent;" } } ]  null

所以基本上我希望數組完好無損,但只是在一行中返回

所以我寫了這個

jq -c --raw-output '.records[]|[.id,.metadata.description,.metadata.width,.metadata.height,.metadata.secondaryColor,.metadata.callToAction,.parent]|@tsv

但我有“數組在 csv 行中無效”錯誤

那可能嗎 ?

謝謝

您需要先對號召性用語進行 JSON 編碼。

% jq -c --raw-output '.records[] |
[.id, .metadata.description, 
      .metadata.width,
      .metadata.height,
      .metadata.secondaryColor,
      (.metadata.callToAction|@json),  # convert this field to JSON first
      .parent
] | @tsv' tmp.json
1       0   0   #fff    [{"link":"/truc.html","value":"nice","colors":{"primary":"transparent;","secondary":"transparent;"}}]

由於聲明的目標在輸出中包含“null”,您可能會考慮使用tojson映射所有選定的值,例如使用map(tojson) 使用示例 JSON,這將產生:

1   null    0   0   "#fff"  [{"link":"/truc.html","value":"nice","colors":{"primary":"transparent;","secondary":"transparent;"}}]   null

但是請注意,字符串#fff被引用了。 如果您不希望以這種方式引用字符串,那么您可能希望考慮:

map(if type == "string" then . else tojson end)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM