gpt4 book ai didi

mysql - Perl/DBI 查询不保留 JSON 输出的整数值

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:35 25 4
gpt4 key购买 nike

我无法让此 Perl 代码为表中的整数返回真正的整数值。 MySQL 表列被正确指定为整数,但此处的 JSON 输出将所有查询值括在引号中。如何正确地保留指定的数据类型(尤其是整数和 bool 值)?

use strict;
use warnings;
use DBI;
use JSON;

my $sth = "SELECT id, name, age FROM table";

my $data = $dbh->selectall_arrayref($sth, {Slice => {}});

my $response = encode_json($data);
print $response;

## outputs: {"id":"1","name":"Joe Blodge","age":"42"}

我在这里做错了什么?我怎样才能让它输出格式正确的 JSON:

{"id":1,"name":"Joe Blodge","age":42}

最佳答案

DBD::mysql 将所有结果作为字符串返回(参见 https://github.com/perl5-dbi/DBD-mysql/issues/253 )。通常 Perl 不关心,编码为 JSON 是少数几个重要的事情之一。您可以使用 Cpanel::JSON::XS::Type为您的 JSON 结构提供类型声明:

use Cpanel::JSON::XS;
use Cpanel::JSON::XS::Type;

my $response = encode_json($data, {id => JSON_TYPE_INT, name => JSON_TYPE_STRING, age => JSON_TYPE_INT});

或者您可以在 JSON 编码之前遍历并数值化适当的元素。

$data->{$_} += 0 for qw(id age);

可以检查每个返回列的类型(如 MySQL 所示),如果您使用语句句柄构造和执行查询,则该类型将作为数组在 $sth->{ TYPE},但这非常复杂并且可能不可靠。

关于mysql - Perl/DBI 查询不保留 JSON 输出的整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com