web-dev-qa-db-ja.com

jqを使用してjson内の複数のフィールドを連続的に解析および表示する

私はこのJsonを持っています

{
    "users": [
        {
            "first": "Stevie",
            "last": "Wonder"
        },
        {
            "first": "Michael",
            "last": "Jackson"
        }
    ]
}

Jqを使って姓名を順番に表示したいのですが。そのようです -

Stevie Wonder
Michael Jackson

これは私が得た距離です -

jq '.users[].first, .users[].last'

しかしそれは表示されます

"Stevie"
"Michael"
"Wonder"
"Jackson"

以下に注意してください -

  1. 私がしたくない二重引用符。
  2. 私はしたくないキャリッジリターン。
  3. それはごちゃごちゃした。私のクエリでは、最初にすべての姓、次にすべての姓が表示されます。しかし、私はファーストラスト、ファーストラストのペアが欲しいのです。
146
San

文字列補間を使用することをお勧めします。

jq '.users[] | "\(.first) \(.last)"'

参照

238
Eric Hartford

文字列を連結するには、 加算 を使用できます。

文字列は、より大きな文字列に結合されて追加されます。

jq '.users[] | .first + " " + .last'
143
abraham

Key、valueが文字列の場合、上記の両方の答えはうまくいきますが、文字列と整数を追加する状況がありました(上記の式を使ったjqエラー)。

要件:jsonの下にURLを作成する

pradeep@seleniumframework>curl http://192.168.99.103:8500/v1/catalog/service/Apache-443 | jq .[0]
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   251  100   251    0     0   155k      0 --:--:-- --:--:-- --:--:--  245k
{
  "Node": "myconsul",
  "Address": "192.168.99.103",
  "ServiceID": "4ce41e90ede4:compassionate_wozniak:443",
  "ServiceName": "Apache-443",
  "ServiceTags": [],
  "ServiceAddress": "",
  "ServicePort": 1443,
  "ServiceEnableTagOverride": false,
  "CreateIndex": 45,
  "ModifyIndex": 45
}

溶液:

curl http://192.168.99.103:8500/v1/catalog/service/Apache-443 |
jq '.[0] | "http://" + .Address + ":" + "\(.ServicePort)"'
10
machzqcq

私はこのようなことをすることによって私が望んでいたものにかなり近づいた

cat my.json | jq '.my.prefix[] | .primary_key + ":", (.sub.prefix[] | "    - " + .sub_key)' | tr -d '"' 

その出力は、私が通常それを他のツールにインポートするのに十分なほど問題なく十分に近いです。 (私はまだ入力JSONのサブセットを基本的にエクスポートする方法を探しています)

3
ThorSummoner
jq '.users[]|.first,.last' | paste - -
0
optman

これは名前の配列を生成します

> jq '[ .users[] | (.first + " " + .last) ]' ~/test.json

[
  "Stevie Wonder",
  "Michael Jackson"
]
0
TinyRoy