Я получаю сообщение об ошибке при выполнении следующего кода:
use JSON;
use Encode qw( encode decode encode_utf8 decode_utf8);
my $arr_features_json = '[{"family":"1","id":107000,"unit":"","parent_id":"0","cast":"2","search_values_range":"1,2,3,4,5,6,7,8,9,10,11,12","category_id":"29","type":"2","position":"3","name":"Número de habitaciones","code":"numberofrooms","locales":"4","flags":"1"}]';
$arr_features_json = decode_json( $arr_features_json );
Я получаю следующее сообщение об ошибке:
неверно сформированный символ UTF-8 в строке JSON со смещением символа 169 (до "\ x {fffd} de haza ...") в строке 13 test.pl
decode_json
выдает ошибку из-за символа ú
в json, поэтому я хочу преобразовать этот символ в \u00fa
. Как я могу это сделать?
2 ответа
В сообщении об ошибке указано, что строка, которую вы пытаетесь обработать, не является UTF-8
или неверная строка UTF-8. Итак, вам нужно преобразовать его в строку UTF-8 с помощью encode_utf8
перед декодированием в json.
use JSON;
use Data::Dumper;
use Encode qw( encode decode encode_utf8 decode_utf8);
my $arr_features_json = '[{"family":"1","id":107000,"unit":"","parent_id":"0","cast":"2","search_values_range":"1,2,3,4,5,6,7,8,9,10,11,12","category_id":"29","type":"2","position":"3","name":"Número de habitaciones","code":"numberofrooms","locales":"4","flags":"1"}]';
my $arr_features = decode_json( encode_utf8($arr_features_json) );
print Dumper($arr_features);
Возможно, вам стоит проверить это article
, чтобы узнать разницу между строками UTF-8
и character strings
.
decode_json
ожидает UTF-8, но имеющаяся у вас строка не закодирована с использованием UTF-8. decode
строка, если это еще не сделано, используйте from_json
вместо decode_json
.
#!/usr/bin/perl
use strict;
use warnings;
use feature qw( say );
use utf8; # Perl code is encoded using UTF-8.
use open ':std', ':encoding(UTF-8)'; # Terminal provides/expects UTF-8.
use JSON qw( from_json );
my $features_json = '
[
{
"family": "1",
"id": 107000,
"unit": "",
"parent_id": "0",
"cast": "2",
"search_values_range": "1,2,3,4,5,6,7,8,9,10,11,12",
"category_id": "29",
"type": "2",
"position": "3",
"name": "Número de habitaciones",
"code": "numberofrooms",
"locales": "4",
"flags": "1"
}
]
';
my $features = from_json( $features_json );
say $features->[0]{name};
Похожие вопросы
Новые вопросы
json
JSON (нотация объектов JavaScript) — это сериализуемый формат обмена данными, который может быть прочитан машиной и человеком. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).