【发布时间】:2019-12-06 02:39:43
【问题描述】:
我对珍珠不是很熟悉,所以请原谅我的问题。
我正在尝试从子例程返回 JSON 对象,但惨遭失败。
我创建了一个.pl 文件,该文件进行查询并返回一些数据。太好了 - 我可以得到响应,这是我的数据返回该对象的样子:
# Print JSON
print encode_json({
'status' => scalar(@$payload) > 0 ? 200 : 404,
'message' => scalar(@$payload) > 0 ? 'OK' : 'Not found.',
'data' => scalar(@$payload) > 0 ? $payload : []
});
// $payload = mySubRoutine({...});
实际响应如下:
{
"message": "OK",
"status": 200,
"data": [
"foo",
8
]
}
技术上有效,但使用data[1] 获取数据感觉非常糟糕。
来自我的sub 我正在返回这样的数据(导致上述结果):
...
$my foo = 8;
return (["foo" => $foo]);
这就是我想要完成的:
{
"message": "OK",
"status": 200,
"data": [
{"foo":8}
]
}
我曾尝试像这样导出JSON 对象(并且有效):
my $json = JSON::XS::encode_json({foo => $foo});
die Data::Dumper::Dumper($json); // $VAR1 = '{"foo":8}';
太棒了 - 越来越近了,现在我只需要从我的子程序中返回它而不是把它转储出去:
my $json = JSON::XS::encode_json({foo => $foo});
return $json;
但是,这样做会给我这个错误:
在使用“strict refs”时不能使用字符串 ("{"foo":8}") 作为 ARRAY ref
现在我自言自语,以可接受的格式从我的子例程返回数据。我还查看了this SO post 以返回JSON。我仍然遇到上述错误的某些版本。
任何有关正确语法的建议将不胜感激!
【问题讨论】:
标签: perl