我需要获取一些 JSON,使用 JQ 对它进行切片,以便 New Relic 可以正确解析它,因为在将 JSON 推送到仪表板时它只采用特定的格式。
我使用 bash 脚本和 WPCLI,然后使用 JQ 格式化 JSON 输出。
下面是我的脚本。
#!/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 .[])"
PLUGINS="$(wp plugin list --format=json | jq .[])"
echo "${SITEURL}" "${USERS}" "${PLUGINS}"
cd ../.. ;
fi
done
以下是我得到的输出...
cat wp-info-output
http://mytest1.com {
"display_name": "testuser1",
"user_email": "[email protected]",
"user_registered": "2018-11-26 17:44:09",
"roles": "administrator"
} {
"name": "akismet",
"status": "inactive",
"update": "available",
"version": "4.0.8"
}
{
"name": "hello",
"status": "inactive",
"update": "none",
"version": "1.7"
}
我需要它看起来像这样......
[
{
"eventType":"WordpressSite",
"siteurl":"http://mytest1.com"
},
{
"eventType":"WordpressPlugins",
"pluginName": "akismet",
"status": "inactive",
"update": "available",
"version": "4.0.8"
},
{
"eventType":"WordpressPlugins",
"pluginName": "hello",
"status": "inactive",
"update": "none",
"version": "1.7"
}
{
"eventType":"Users",
"display_name": "testuser2",
"user_email": "[email protected]",
"user_registered": "2018-11-26 17:44:04",
"roles": "administrator"
}
]
我认为 jq 是我对 JSON 进行格式化的答案,但我遇到了一些困难。
答案1
看来你想获取所有这些 JSON 对象并将它们混合在一位数组中:尝试
siteurl=$(wp option get siteurl)
users=$(
wp user list --fields=display_name,user_email,user_registered,roles --format=json) |
jq '.[] | .eventType = "WordpressUser"'
)
plugins=$( wp plugin list --format=json | jq '.[] | .eventType = "WordpressPlugin"' )
{
printf '{"eventType":"WordpressSite","siteurl":"%s"}\n' "$(wp option get siteurl)"
echo "$plugins"
echo "$users"
} | jq -s .