【问题标题】:How to do an unpretty print on pretty JSON file in shell >> serial string JSON >> ES _bulk?如何在 shell >> 串行字符串 JSON >> ES _bulk 中对漂亮的 JSON 文件进行不漂亮的打印?
【发布时间】:2014-11-09 15:10:18
【问题描述】:

在 AWS EC2 上使用 Elasticsearch 时,我遇到了批量索引的问题。 ES _bulk 端点要求文件基本上是 JSON 串行字符串,每个字符串上都有 \n 终止符;我使用各种 Web API 和文件预处理/处理构建的内容是漂亮的 JSON,即易于人类阅读。

是否有一个简单的 shell 脚本方法可以将所有漂亮的 JSON 简单地连接成字符串,而无需加载一些 Java 库或其他什么?如果这有助于解析,我可以在预处理期间将令牌添加到基本文件以标记所需的 \n 中断,但如果有人对工具集有提示,我将不胜感激。我感觉那里有脚本,我知道有一些库,但到目前为止我还没有找到任何简单的命令行工具来进行不漂亮的打印。

【问题讨论】:

    标签: json shell elasticsearch jq


    【解决方案1】:

    您可以尝试使用出色的 jq 工具在 shell 中解析 JSON。要使用 jq 进行 de-pretty 打印,您可以使用以下任一方法:

    cat pretty-printed.json | jq -c .
    jq -c . pretty-printed.json
    

    -c(或 --compact-output)告诉它打印不漂亮(这是默认设置)。这 ”。”告诉它“按原样”返回 JSON 内容,而不是重新格式化。它被转储回标准输出,因此您可以重定向输出或将其通过管道传输到其他东西。

    附:我正在寻求解决同样的问题并选择了这个选项。

    【讨论】:

    • 并重定向到另一个文件...?
    【解决方案2】:

    D_S_toowhite 的答案不是直接的答案,但它让我以正确的方式思考,即问题是删除所有空白。我找到了一种使用命令行工具 tr 删除所有空格的非常简单的方法:

    tr -d [:space:] inputfile
    

    :space: 标记删除所有空白、制表符、空格、垂直制表符等。所以一个漂亮的 JSON 输入如下:-

    {
        "version" : "4.0",
        "success" : true,
        "result" :
        {
                "Focus" : 0.000590008,
                "Arc" : 12
        }
    }
    

    变成这个 JSON 串行字符串:

    {"version":"4.0","success":true,"result":{"Focus":0.000590008,"Arc":12}}
    

    我仍然必须解决 \n 终止符,但我认为现在至少在我的特殊情况下这很简单,只需在使用 sed 的右括号对之后追加即可。

    【讨论】:

    • 这种方法的问题在于,如果数据包含任何重要的空白(即其中一个值是包含句子的字符串),它将被错误地剥离。
    【解决方案3】:

    您可以尝试使用正则表达式查找/替换:

    1. 查找内容:将“^\s{2,}”替换为“”
    2. 查找“\n”替换“”的内容

    看到这个:https://github.com/dzhibas/SublimePrettyJson/issues/17

    【讨论】:

      【解决方案4】:

      jsonlint 在 npm 的帮助下很容易在命令行中启动和运行,打印出'no fluff' JSON 的简单方法是给它一个缩进字符“”。

      jsonlint -t ""
      

      作为对命令行用户的奖励,我一直使用它来获取粘贴缓冲区(在 Mac 上)并将它们转换为其他内容,例如:

      为 JSON linted 'compressed' 格式交换缓冲区内容:

      pbpaste | jsonlint -t "" | pbcopy
      

      用漂亮的 JSON linted 格式交换缓冲区内容:

      pbpaste | jsonlint | pbcopy
      

      您还可以将文件内容通过管道传输到文件的丑陋(和 JSON linted)版本:

      cat data-pretty.json | jsonlint -t "" > data-ugly.json
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-07
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 2020-11-19
        • 2021-01-31
        相关资源
        最近更新 更多