![](/img/trans.png)
[英]Get Specific JSON Object by ID from array and return the JSON object (Javascript/JQuery)
[英]return specific items in json object using bash
我試圖對多個對象進行json響應(來自curl命令和安裝在我的linux comp上的jq),並使用for循環編輯每個對象。 問題是我不明白如何將每個{}轉換為單獨的對象。 例如,我的json響應是:
{
"Name": "testuser1",
"Username": "testuser1",
"Url": "www.test1.com"
}
{
"Name": "testuser2",
"Username": "testuser2",
"Url": "www.test2.com"
}
理想情況下,我想用數字來指代每個人。 例如,“ echo $ item | jq'.Name [0]'”
{
"Name": "testuser1",
"Username": "testuser1",
"Url": "www.test1.com"
}
當我運行上面的命令時,出現以下錯誤。
jq: error (at <stdin>:1): Cannot index string with number
我想為每個對象運行一個forloop。
您需要做兩件事:一,使用-s
選項,以便每個單獨的對象成為單個數組的元素。 第二,您嘗試索引Name
,而不是訪問數組元素的Name
屬性。
$ jq -sr '.[].Name' tmp.json
testuser1
testuser2
如果要引用流中的特定元素,則可以:
$ jq -sr '.[1].Name' tmp.json
testuser2
這樣(並假設您的名字中沒有一個包含換行符),一個適當的循環將看起來像
while IFS= read -r name; do
...
done < <(jq -sr '.[].Name' tmp.json)
jq是面向流的,因此,如果要對每個對象執行某些操作,則在jq中定義該操作可能就足夠了,讓jq毫不費力地處理流。
如果由於某種原因您需要流中每個項目的索引,那么如果jq有inputs
(與jq 1.5一樣),則可以避免使用-s
選項。 (避免使用-s
選項可以節省內存。)
以下假設您的jq確實有inputs
; 索引是從0開始的; 並使用-n選項調用該jq。
foreach inputs as $input (-1; .+1; [., $input])
這將產生[INDEX,ITEM]數組流。 然后,您可以使用jq的管道運算符( |
)進一步添加jq過濾器。
為了說明調用jq的合適方法,讓我們假設JSON實體流來自curl COMMAND
,並且我們想要第二項(即索引為1)。
curl COMMAND | jq --argjson i 1 -n -f program.jq
(請注意-n
命令行選項!)
def get($i):
label $done
| foreach inputs as $input (-1; .+1;
if $i == . then $input, break $done else empty end);
get($i)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.