3

KornShell を使用して JSON 出力を文字列として処理することにより、JSON 出力を解析するための実用的なコードがあります。私が抱えている問題は、ベンダーが私が興味を持っているフィールドの位置を変更し続けていることです。JSON では、キーと値のペアで解析できることを理解しています。

これを行うことができるものはありますか?特定の分野に興味があり、それを使用して別の RESTAPI 呼び出しのステータスをチェックしたいと考えています。

私のサンプルjson出力は次のようなものです:

JSONDATA   value : 
{
  "status": "success",
  "job-execution-id": 396805,
  "job-execution-user": "flexapp",
  "job-execution-trigger": "RESTAPI"
} 

job-execution-idスクリプトの残りの部分でこのジョブを監視するには、この値が必要です。

次のコマンドを使用して解析しています。

RUNJOB=$(print ${DATA} |cut -f3 -d':'|cut -f1 -d','| tr -d [:blank:]) >>  ${LOGDIR}/${LOGFILE}

これの問題は、フィールドが で区切られていること:です。フィールドの位置は、リリース中にベンダーによって変更されることが知られています。

"job-execution-id": 396805そのため、json出力のどこにいても、常に のキーと値のペアを提供するユーティリティを使用できるかどうかを確認しようとしています。

私はjsawkを見始めました.jsインタープリターをマシンにインストールする必要がありますが、これは望ましくありません。問題を解決するために必要な RPM を見つける方法についてのヒントはありますか?

RHEL5.5を使用しています。

どんな助けでも大歓迎です。

4

2 に答える 2

0

Python はデフォルトで CentOS に含まれているため、できることの 1 つは、JSON 文字列を Python スクリプトに渡し、Python の JSON パーサーを使用することです。その後、スクリプトによって書き出された値を取得できます。ニーズに合わせて変更できる例を以下に示します。

Python スクリプトで他のディクショナリ キーを指定すると、順序の変更を気にすることなく、必要な値を取得できることに注意してください。

Python スクリプト:

#get_job_execution_id.py
# The try/except is because you'll probably have Python 2.4 on CentOS 5.5,
# and the straight "import json" statement won't work unless you have Python 2.6+.
try:
    import json
except:
    import simplejson as json
import sys

json_data = sys.argv[1]
data = json.loads(json_data)
job_execution_id = data['job-execution-id']
sys.stdout.write(str(job_execution_id))

それを実行する Kornshell スクリプト:

#get_job_execution_id.sh
#!/bin/ksh
JSON_DATA='{"status":"success","job-execution-id":396805,"job-execution-user":"flexapp","job-execution-trigger":"RESTAPI"}'
EXECUTION_ID=`python get_execution_id.py "$JSON_DATA"`
echo $EXECUTION_ID
于 2013-05-25T23:35:17.363 に答える