代码之家  ›  专栏  ›  技术社区  ›  kyb thursdaysDove

使用jq拆分多个输入json

  •  1
  • kyb thursdaysDove  · 技术社区  · 6 年前

    给定JSON行

    {"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}
    

    三个独立的JSON对象。

    需要一个接一个地处理。有这样的东西很好

    echo "$json" | jq --first-one
    

    预期输出:

    {"a":0,"b":{"c":"C"}}
    

    我找到了唯一可以删除第一个对象并输出其他对象的命令。 inputs

    echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' | jq -c inputs
    

    输出:

    {"x":33}
    {"asd":889}
    

    如何从输入流中只读第一个对象,而不接触其余对象?

    解决办法

    写这个问题的时候,我找到了一个解决方法,但看起来很麻烦

    echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' | jq -c . | head -1
    

    只需得到第一行…

    1 回复  |  直到 6 年前
        1
  •  2
  •   peak    6 年前

    一般来说,如果可能的话,应该避免吞咽。如果你的JQ有 input ,你可以简单地写:

    echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' |
      jq -n input
    

    如果你的JQ没有 输入 现在是升级到JQ1.6的好时机。如果这不是一个选项,那么无论如何使用-s选项,例如 jq -s '.[0]'