[英]How to insert a key-value pair after a specified key in a JSON object using jq?
[英]Add a Key Value Pair in JSON Object Using JQ and Bash
編輯此帖子以進行澄清,因為我第一次做得不好-
我有一個腳本,該腳本可爬網目錄並從WP網站中提取信息,並構建對象的JSON數組,這些對象最終將被饋送到可視儀表板中。 該腳本可以完美運行,但是我似乎無法像在第一個對象中那樣獲取siteurl
鍵以將其發布到每個對象中。
需要將具有null的密鑰對替換siteurl
數組中的相應siteurl
。
我覺得我應該可以使用jq和--arg name value
選項來執行此操作,但顯然我做錯了。 不知道我沒有正確傳遞變量還是WPCLI有問題。
輸出和腳本如下。
[
{
"eventType": "WordpressSite",
"siteurl": "http://mytest1.com"
},
{
"eventType": "WordpressPlugin",
"plugin_name": "akismet",
"plugin_status": "inactive",
"plugin_update": "available",
"plugin_version": "4.0.8",
"siteurl": null
},
{
"eventType": "WordpressPlugin",
"plugin_name": "hello",
"plugin_status": "inactive",
"plugin_update": "none",
"plugin_version": "1.7",
"siteurl": null
},
{
"eventType": "WordpressUser",
"siteurl": null,
"user_email": "example.user@email.com",
"user_name": "testuser1",
"user_registered": "2018-11-26 17:44:09",
"user_role": "administrator"
}
]
[
{
"eventType": "WordpressSite",
"siteurl": "http://mytest2.com"
},
{
"eventType": "WordpressPlugin",
"plugin_name": "akismet",
"plugin_status": "inactive",
"plugin_update": "available",
"plugin_version": "4.0.8",
"siteurl": null
},
{
"eventType": "WordpressPlugin",
"plugin_name": "hello",
"plugin_status": "inactive",
"plugin_update": "none",
"plugin_version": "1.7",
"siteurl": null
},
{
"eventType": "WordpressUser",
"siteurl": null,
"user_email": "example.user@email.com",
"user_name": "testuser2",
"user_registered": "2018-11-26 17:44:04",
"user_role": "administrator"
}
]
#!/bin/bash
#for d in /var/www/* ; do
# echo "$d"
#done
for f in /var/www/*/public_html/; do
if [[ -d $f ]]; then
#echo "$f"
cd $f;
siteurl=$(wp option get siteurl)
users=$(wp user list --fields=display_name,user_email,user_registered,roles --format=json | jq '.[] | .eventType = "WordpressUser"' | jq . --arg siteurl $(wp option get siteurl) | jq '. + {"user_name": .display_name, "user_role": .roles, "siteurl": ."$siteurl"} | del (.display_name, .roles)')
plugins=$(wp plugin list --format=json | jq '.[] | .eventType = "WordpressPlugin"' | jq '. + {"plugin_name": .name, "plugin_status": .status, "plugin_version": .version, "plugin_update": .update, "siteurl": ."$siteurl"} | del(.name, .status, .version, .update)')
{
printf '{"eventType":"WordpressSite","siteurl":"%s"}\n' "$(wp option get siteurl)"
echo "$plugins"
echo "$users"
} | jq -sS .
cd ../..;
fi
done
要將"siteurl":"http://mysite1.com"
到每個對象:
jq 'map(.siteurl = "http://mytest1.com")' file.json
要從第一個對象復制siteurl
:
jq '.[0].siteurl as $v | map(.siteurl = $v)' file.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.