3

我有一个使用 KornShell 解析 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

ast-open 项目有 libdss(和一个 dss 包装器),据说可以与 ksh 一起使用。文档很少,仅限于 ast-user 邮件列表中的几条消息。

libdss的回归测试包含一些 json 和 xml 示例。

我会尝试找到更多信息。

于 2013-05-25T14:25:14.563 回答
0

CentOS 默认包含 Python,因此您可以做的一件事是将 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 回答