【发布时间】:2014-03-15 13:51:21
【问题描述】:
我有一个如下所示的文件:
{
"status": "success",
"msg": {
"status": "success",
"inscount": 2,
"critical": 0,
"result": [
{
"Insulin": "Insuman Rapid",
"morning change": 0,
"noon change": 1,
"evening change": 0,
"action": 3,
"change morning from": "22",
"change noon from": "9",
"change evening from": "20",
"change morning to": "22",
"change noon to": "12",
"change evening to": "20",
"change type": "1"
},
{
"Insulin": "Insuman basal",
"morning change": 0,
"noon change": 0,
"evening change": 0,
"action": null,
"change morning from": "7",
"change noon from": "6",
"change evening from": "8",
"change morning to": "7",
"change noon to": "6",
"change evening to": "8",
"change type": “1”
}
],
"balance": "9974"
}
}
这是来自 Web 服务的 JSON 响应,我将其保存到临时文件中。文件。 我想将结果数组提取到一个 perl 对象数组中。
它是通过以下服务调用生成的
system("curl -X POST -H '$CONTENT_TYPE' -d '$ARGS' -o $TEMP_FILE $SERVICE_URL 2>/dev/null");
我正在使用这段代码来提取状态、关键和计数
if (open(OUTFILE,"<$TEMP_FILE")) {
while(<OUTFILE>) {
chomp;
if (/status\"?\:\s*\"success\"/) {
$SUCCESS=1;
print"Success File open********* Febin :) \n";
}
if (/critical\"?\:\s*\"1\"/) {
$CRITICAL=1;
}
if (/change type\"?\:\s*\"(\d+)\"/) {
$CHANGE_TYPE=$1;
}
if (/balance\"?\:\s*\"([^\"]+)\"/) {
$BALANCE=$1;
}
foreach $key (keys %TIME_VALUES) {
if(/$key\schange\"?\:\s*\"1\"/) {
$TIME_VALUES{$key}[0] = 1;
}
if(/change $key from\"?\:\s*\"([^\"]+)\"/) {
$TIME_VALUES{$key}[1] = $1;
}
if(/change $key to\"?\:\s*\"([^\"]+)\"/) {
$TIME_VALUES{$key}[2] = $1;
}
}
}
close(OUTFILE);
请问有什么方法可以解决
我是 perl 脚本的新手
【问题讨论】:
-
另外,当您可以使用 LWP + CPAN 中的 JSON 解析模块时,为什么需要保存到临时文件?
-
@john jensen。因为我正在编辑一个现有的星号 IVR 代码,它已经由其他人完成。随着服务的变化,Json 响应将在此之前以数组的形式发送结果