Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么用Perl从数据库读取JSON会警告;宽字符“;?_Json_Perl - Fatal编程技术网

为什么用Perl从数据库读取JSON会警告;宽字符“;?

为什么用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

我使用Perl从数据库中读取数据(我是Perl新手),其中一列是JSON数组。我遇到的问题是,当我试图读取JSON中的数据时,我得到一个错误“子例程条目中的宽字符”

表:

id |姓名|日期|数据

样本数据

{“持续时间”:“24”,“名称”:“我的测试”,“可见”:“1”}

使用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


该错误意味着将大于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


是否在数据库中选择UTF-8字符串?DBD驱动程序是否正确配置以支持它?在将值传递给
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>";
    }  
}