小编Wel*_*ige的帖子

JQ 从编码字段中替换“\n”

我现在已经尝试了很多解决方案,但恐怕我对JQ的理解还不够,我从两天前才开始尝试使用它。

我得到了一个非常好的解决方案来将我的文件从 Json 解析为 Csv,但是有一个小陷阱。

Json 内部有 1 个经过 Base64 编码的字段 (.data),它本身就是一个编码的 Json。在这个子 Json 中,有一个包含文本 (.text) 的字段,其中包含“\n”,并且在转换时,该行会被损坏,因为“\n”被转换为最终文件中的实际换行符。

这是我现在的命令:

jq-linux64 -r '["ackId","data","senderPhoneNumber","eventType","eventId","messageId2","postbackData","text","sendTime","project_number","type","event_type","product","messageId","publishTime"], (.receivedMessages[] | [.ackId, .message.data, (.message.data | @base64d | fromjson | .senderPhoneNumber, .eventType, .eventId, .messageId, .postbackData, .text, .sendTime), .message.attributes.project_number, .message.attributes.type, .message.attributes.event_type, .message.attributes.product, .message.messageId,.message.publishTime]) | @csv' <inputfile.txt >outputfile.txt
Run Code Online (Sandbox Code Playgroud)

在此命令中,我进行解码,使用“fromjson”,然后从其中获取我需要的字段。

“.text”字段是我希望删除/替换的换行符字段。

我尝试了 sub 和 gsub,但无法创建有效的命令行或产生所需输出的命令行。

关于如何从“,text”字段中替换“\n”有什么提示吗?

输入文件示例:

{
  "receivedMessages": [
    {
      "ackId": "xxxxxx",
      "message": {
        "data": "eyJzZW5kZXJQaG9uZU51bWJlciI6ICIrOTk5OTk5OTk5OTk5OSIsIm1lc3NhZ2VJZCI6ICIyM2QyM2QyM2QzMmQiLCJzZW5kVGltZSI6ICIyMDIxLTAyLTAyVDIwOjAwOjAwLjAwMDAxIiwidGV4dCI6ICJYWFhYWCBYWFhYWFhYRSwgWFhYWFhYWC8gWHh4eHh4LlxuXG5YeHh4eHh4eHg6XG5cbjEgeHh4eCB4eCB4eHh4ICgyMDAgeHgpXG4yLDUgeHh4eHhcbjEgeHh4eCBcblxuWHh4eHh4IHh4eHh4eCJ9Cg==",
        "attributes": {
          "product": "XXXX",
          "project_number": "XXXXXX",
          "message_type": "TEXT",
          "type": "message"
        },
        "messageId": "234234234234234234",
        "publishTime": "2021-02-02T20:15:22.888Z" …
Run Code Online (Sandbox Code Playgroud)

bash json gsub export-to-csv jq

2
推荐指数
1
解决办法
2458
查看次数

标签 统计

bash ×1

export-to-csv ×1

gsub ×1

jq ×1

json ×1