我有一个工作代码,用于使用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。
非常感谢任何帮助。
答案 0 :(得分:0)
ast-open项目有libdss(和一个dss包装器),据说可以和ksh一起使用。文档很少,仅限于ast-user邮件列表中的一些消息。
libdss的regression tests包含一些json和xml示例。
我会尝试找到更多信息。
答案 1 :(得分:0)
Python默认包含在CentOS中,因此您可以做的一件事就是将您的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