質問: ### 前提・実現したいこと 現在、AWS S3から取得されるjson形式のデータの一部で、 StringではなくArray型になっているため、 スクリプトの処理がエラーになっているようです。 ※cronで定期的にデータ取得をさせているのですが、エラーになっているデータがいまだに見つかっていない為、サンプルがありません... ※エラーメッセージの内容に関しては、別の質問()で質問させていただいており、回答をいただきました。 手動でデータをチェックして、削除・修正していられない(そもそもファイルが多くて見つかっていない)ので、 スクリプトで型をチェックして、処理をできないかと考えています。 json形式のデータで、型をチェックする方法はあるのでしょうか。 ### 発生している問題・エラーメッセージ jq: error: Cannot iterate over string jq: error: string and array cannot be sorted, as they are not both arrays ~~~ eventTime の部分でソートしようとしているので、eventTimeにArray型のデータが混ざっているのではないかと考えています。 ### ソースコード ``` find /var/log/trail-log/ -name "*.json.gz" | sort | xargs gunzip -c | /usr/bin/jq '.[] | sort_by(.eventTime) | .[]' | /usr/bin/jq '{awsRegion, eventName, eventTime, userName: .userIdentity.userName, requestParameters}' | /usr/bin/jq '"[\(.eventTime)] \(.awsRegion) \(.userName) \(.eventName) \(.requestParameters)"' > trail.log ``` ### 補足情報(言語/FW/ツール等のバージョンなど) ※cronで定期的にデータ取得をさせているのですが、エラーになっているデータがいまだに見つかっていない為、サンプルがありません...
回答: jq コマンドは使ったことがないのですが、リファレンスを見ると、`type` という関数があるようです。これを使って、実際に `eventTime` の型を調べてみるといいのではないでしょうか。 あと、jq コマンドで制御文も書けるみたいですから型判定をしたうえで処理をすることもできるのではないでしょうか。 と、今のところ、ここまでしか言えませんが。