从包含一系列JSON对象的文件中获取第一个JSON对象。

huangapple go评论88阅读模式
英文:

Get the first JSON object from a file containing a sequence of JSON objects

问题

我有一个包含一系列 JSON 对象的文件。使用 jq 工具,我如何从该文件中获取第一个 JSON 对象?

我尝试过 jq limit(1; .) input.jsonl,但这限制了文件中每个单独对象的长度,而不是只给我第一个对象。我也已经阅读了 jq 的整个手册!也许我漏掉了什么。

英文:

I have a file containing a sequence of json objects. Using the jq tool, how can I get the first json object from that file?

I have tried jq limit(1; .) input.jsonl but that limits the length of each individual object in the file, rather than giving me just the first object. I have also read through the whole of the jq man page! Maybe I missed something.

答案1

得分: 4

空输入(-n)在这种情况下非常有用:

jq -n 'input' file.json

input 过滤器 将从提供的输入流中读取一个单独的JSON元素。

示例:

jq -n 'input' <<JSON
{ "first element": [ 1, 2 ] }
{ "second element": [ 3, 4, 5 ] }
JSON

输出:

{
  "first element": [
    1,
    2
  ]
}
英文:

Null input (-n) is useful in such a case:

jq -n &#39;input&#39; file.json

The input filter will read a single JSON element from the provided input stream.

Example:

jq -n &#39;input&#39; &lt;&lt;JSON
{ &quot;first element&quot;: [ 1, 2 ] }
{ &quot;second element&quot;: [ 3, 4, 5 ] }
JSON

Output:

{
  &quot;first element&quot;: [
    1,
    2
  ]
}

答案2

得分: 0

{
  "对于像这样的输入文件\n\n```json\n{\n  \"a\": \"b\"\n}\n{\n  \"c\": \"d\"\n}\n```\n\n你可以\n\n- 吞掉整个输入然后打印第一个数组元素:\n\n  ```sh\n  $ jq -s '.[0]' in.json \n  {\n    \"a\": \"b\"\n  }\n  ```\n\n- 使用空输入,然后使用 `inputs`:\n\n  ```sh\n  $ jq -n '[inputs][0]' in.json \n  {\n    \"a\": \"b\"\n  }"
}
英文:

For an input file like

{
  &quot;a&quot;: &quot;b&quot;
}
{
  &quot;c&quot;: &quot;d&quot;
}

you could

  • slurp the entire input and then print the first array element:

    $ jq -s &#39;.[0]&#39; in.json 
    {
      &quot;a&quot;: &quot;b&quot;
    }
    
  • use null-input, and then inputs:

    $ jq -n &#39;[inputs][0]&#39; in.json 
    {
      &quot;a&quot;: &quot;b&quot;
    }
    
    
    

答案3

得分: -1

好的,可以这样做:

jq -c . INPUT.JSONL | jq -n 'input | first'

-c选项表示每行输出一个条目,然后使用jq-n选项来执行单个jq命令以获取第一行。

英文:

Well okay one way to do it is like this:

jq -c . INPUT.JSONL  | head -n 1 | jq

The -c option says to output the entries one per line, then head gets the first line, then we pretty-print it again with jq. Surely there is a way to do this with just a single invokation of jq?

huangapple
  • 本文由 发表于 2023年7月13日 22:47:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/76680728.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定