为什么用Perl从数据库读取JSON会警告;宽字符“;?
我使用Perl从数据库中读取数据(我是Perl新手),其中一列是JSON数组。我遇到的问题是,当我试图读取JSON中的数据时,我得到一个错误“子例程条目中的宽字符” 表: id |姓名|日期|数据 样本数据 {“持续时间”:“24”,“名称”:“我的测试”,“可见”:“1”}为什么用Perl从数据库读取JSON会警告;宽字符“;?,json,perl,Json,Perl,我使用Perl从数据库中读取数据(我是Perl新手),其中一列是JSON数组。我遇到的问题是,当我试图读取JSON中的数据时,我得到一个错误“子例程条目中的宽字符” 表: id |姓名|日期|数据 样本数据 {“持续时间”:“24”,“名称”:“我的测试”,“可见”:“1”} 使用JSON qw(解码JSON); 我的$current\u connection=$DATABASE\u connection->prepare(“从syt='area1'的数据中选择*); $current_conn
使用JSON qw(解码JSON);
我的$current\u connection=$DATABASE\u connection->prepare(“从syt='area1'的数据中选择*);
$current_connection->execute();
while(my$db\u data=$current\u connection->fetchrow\u hashref())
{
my$name=$db_data->{name};
my$object=decode_json($db_data->{data});
foreach my$key(排序键%{$object}){
我的$result;
$pages.=“$result->{$key}->{name}”;
}
}
该错误意味着将大于255的字符传递给了需要字节字符串的子系统
当存储在数据库中时,字符串使用某种字符编码(可能是UTF-8)进行编码。您似乎已经解码了文本(例如,通过使用mysql\u enable\u utf8mb4=>1
),生成了一个Unicode码点字符串。然而,decode\ujson
需要UTF-8
解决方案是使用from_json
或json->new->decode
而不是decode_json
;这些需要解码文本(UCP字符串)
您可以使用sprintf“%vX”和$json
验证这是否是问题所在
比如说,
- 如果为“
”和“é
♠代码>“ 那是他们的UCP。使用来自_json的
或
json->new->decode
- 如果为“
”和“é
♠代码>“ 那是他们的UTF-8。使用
或decode\ujson
json->new->utf8->decode
mysql\u enable\u utf8mb4=>1
),生成了一个Unicode码点字符串。然而,decode\ujson
需要UTF-8
解决方案是使用from_json
或json->new->decode
而不是decode_json
;这些需要解码文本(UCP字符串)
您可以使用sprintf“%vX”和$json
验证这是否是问题所在
比如说,
- 如果为“
”和“é
♠代码>“ 那是他们的UCP。使用来自_json的
或
json->new->decode
- 如果为“
”和“é
♠代码>“ 那是他们的UTF-8。使用
或decode\ujson
json->new->utf8->decode
decode\u json
之前是否对其进行解码?您不会从发布的示例中得到该错误。是否在数据库中选择UTF-8字符串?DBD驱动程序是否正确配置以支持它?在将值传递给decode_json
之前,是否对其进行解码?您不会从发布的示例中得到该错误。
use JSON qw(decode_json);
my $current_connection = $DATABASE_CONNECTION->prepare( "SELECT * FROM data WHERE syt = 'area1' " );
$current_connection->execute();
while( my $db_data = $current_connection->fetchrow_hashref() )
{
my $name = $db_data->{name};
my $object = decode_json($db_data->{data});
foreach my $key (sort keys %{$object}) {
my $result;
$pages .= "<p> $result->{$key}->{name} </p>";
}
}