Create JSON file using jq

不羁岁月 提交于 2021-02-18 21:12:14

问题


I'm trying to create a JSON file by executing the following command:

jq --arg greeting world '{"hello":"$greeting"}' > file.json

This command stuck without any input. While

jq -n --arg greeting world '{"hello":"$greeting"}' > file.json doesn't parse correctly. I'm just wondering is really possible to create a JSON file.


回答1:


So your code doesn't work because included the variable inside double quotes which gets treated as string. That is why it is not working

As @Jeff Mercado, pointed out the solution is

jq -n --arg greeting world '{"hello":$greeting}' > file.json

About the - in a name. This is actually possible. But as of now this is not available in released version of jq. If you compile the master branch of jq on your system. There is a new variable called $ARGS.named which can be used to access the information.

I just compiled and check the below command and it works like a charm

./jq -n --arg name-is tarun '{"name": $ARGS.named["name-is"]}'
{
  "name": "tarun"
}



回答2:


To add to what Jeff and Tarun have already said, you might want to use the \() string interpolation syntax in your command. eg.

jq -n --arg greeting world '{"hello":"\($greeting)"}'

for me this produces

{
  "hello": "world"
}

Regarding your reply to Jeff's comment, the argument name you choose has to be a valid jq variable name so an arg like greeting-for-you won't work but you could use underscores so greeting_for_you would be ok. Or you could use the version Tarun described.




回答3:


$ARGS provides access to named (--arg name value) and positional (--args one two three) arguments from the jq command line, and allows you to build up objects easily & safely.

Named arguments:

$ jq -n '{christmas: $ARGS.named}' \
  --arg one 'partridge in a "pear" tree' \
  --arg two 'turtle doves'

{
  "christmas": {
    "one": "partridge in a \"pear\" tree",
    "two": "turtle doves"
  }
}

Positional arguments:

$ jq -n '{numbers: $ARGS.positional}' --args 1 2 3

{
  "numbers": [
    "1",
    "2",
    "3"
  ]
}

Note you can access individual items of the positional array, and that the named arguments are directly available as variables:

jq -n '{first: {name: $one, count: $ARGS.positional[0]}, all: $ARGS}' \
  --arg one 'partridge in a "pear" tree' \
  --arg two 'turtle doves' \
  --args 1 2 3

{
  "first": {
    "name": "partridge in a \"pear\" tree",
    "count": "1"
  },
  "all": {
    "positional": [
      "1",
      "2",
      "3"
    ],
    "named": {
      "one": "partridge in a \"pear\" tree",
      "two": "turtle doves"
    }
  }
}


来源:https://stackoverflow.com/questions/45469133/create-json-file-using-jq

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!