JSONをスライスしてJQを使用して新しいRelicコレクション用の配列を作成する

JSONをスライスしてJQを使用して新しいRelicコレクション用の配列を作成する

New Relicがそれを正しく解析できるように、一部のJSONをJQを使用して分割する必要があります。これは、JSONがダッシュボードにプッシュされたときに特定の形式でのみ提供されるためです。

私はWPCLIでbashスクリプトを使用し、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オブジェクトを取得して1ビット配列に混合したいようです。試してみてください。

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 .

おすすめ記事