Json

如何使用 jq 提取 json 文件中的第一個欄位/值

  • April 29, 2021

我有一個包含以下內容的 JSON 文件:

{
 "Message": {
   "greeting": "hello"
 }
}
{
 "Message": {
   "greeting": "Bonjour"
 }
}
{
 "Message": {
   "greeting": "Konnichiwa"
 }
}

我只想提取具有"greeting" : "hello". 我似乎無法在其上使用索引

cat "$file" | jq -c "."

上述命令全部返回 3 條消息。我想問一下如何只提取第一條消息或 1 by 1。

您的輸入文件包含幾個 JSON 對象。用於-s將它們全部讀入單個數組,否則jq將它們一一處理。然後,您可以通過指定其索引來列印第一個:

jq -cs '.[0]' 

假設您想要第一個 JSON 對象,它的greetingkey 對應於 value hello,具體來說,不僅僅是第一個 JSON 對象。

jq -s '[.[] | select(.Message.greeting == "hello")][0]' file.json

這會將 JSON 對象讀file.json入帶有-s( --surp) 的數組中。然後過濾此數組以查找包含.Message.greeting具有 value 的鍵的任何對象hello。所有這些對像都放入一個數組中,並返回其中的第一個。

使用修改後的範例文件,

{
 "Message": {
   "greeting": "Konnichiwa"
 }
}
{
 "Message": {
   "greeting": "hello",
   "id": 1
 }
}
{
 "Message": {
   "greeting": "hello",
   "id": 2
 }
}
{
 "Message": {
   "greeting": "Bonjour"
 }
}

id添加鍵只是為了區分兩個相同的對象,命令jq返回

{
 "Message": {
   "greeting": "hello",
   "id": 1
 }
}

引用自:https://unix.stackexchange.com/questions/638746