使用KornShell解析JSON的方法

时间:2013-05-24 19:14:57

标签: json parsing ksh

我有一个工作代码,用于使用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。

非常感谢任何帮助。

2 个答案:

答案 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