我有一个非标准的JSON格式,它使用一些带有反斜杠转义字符的嵌套数据.

{
"getFeedFromMyTeam": [
    {
        "OpenedAt": 1693321311,
        "feedData": "{\"keyOne\":\"my_data_one\",\"keyTwo\":\"my_data_two\"}",
        "feedId": "123456789",
        "recipients": [
            {
                "receiverId": "johns",
                "receiverName": "John Smith"
            }
        ],
        "senderId": "janed",
        "senderName": "Jane Doe"
    }

],
"hasMore": true,
"paginationToken": "100"  
}

我正在try 使用以下命令将其转换为CSV文件:

cat my.json | jq -r '.getFeedFromMyTeam[] | .recipients[] as $t | [.OpenedAt,$t.receiverId,$t.receiverName,.senderId,.feedData] | @csv' 

然而,一切都很好,而不是完整的".feed Data",它现在看起来像:

"{""keyOne"":""my_data_one"",""keyTwo"":""my_data_two""}"

我只想从"keyTwo"获取数据,即"my_data_Two"

现在是这样了:

1693321311,"johns","John Smith","janed","{""keyOne"":""my_data_one"",""keyTwo"":""my_data_two""}"

我想要获得:

1693321311,"johns","John Smith","janed","my_data_two"

理想情况下,我只想使用JQ,但如果不可能,那么也可以使用awk、sed等.

推荐答案

feedData是一个JSON对象,所以您可以用fromjson来转换它:

$ jq -r '.getFeedFromMyTeam[] | .recipients[] as $t | [.OpenedAt,$t.receiverId,$t.receiverName,.senderId,(.feedData | fromjson | .keyTwo)] | @csv' file.json
1693321311,"johns","John Smith","janed","my_data_two"

Json相关问答推荐

两种情况下过滤的JOLT规范

我可以使用JQ来缩小数组中的json对象的范围吗?

使用JQ从jsonl文件中删除具有匹配键/值的行

如何使用模式注册中心创建从主题中取消本地化的ks qlDB表?

如何使用PowerShell从ExchangeOnline命令执行中获得JSON输出

Moshi:序列化 List 时出现问题

jq如何合并两个json对象

将JSON行转换为TSV格式, for each 数组项生成单独的行

如何编写 jolt 规范以将不同的对象转换为数组

Powershell 7.2:ConvertFrom-Json - 日期处理

PowerShell:如何将哈希表输出为 json 并使用 foreach 循环将其存储在变量中?

ASP.NET MVC - 将 Json 结果与 ViewResult 结合起来

Spring MVC控制器中的JSON参数

json和空数组

我应该如何处理 JSON 中的 HATEOAS 链接和引用?

使用 Node.js 对 JSON 中的字符串大小有限制吗?

我可以使用空字符串作为对象标识符吗?

在 Java 中比较两个 JSON 文件的最佳方法

有什么方法可以判断您安装的 gulp 版本吗?

ASP.NET Web API JSON 输出中没有时间的日期