как я могу разобрать объект perl json, в ключах которого есть пробелы
{
"abc" : [
"lmn" : {
"Ab Cd" : "Xy Zw",
"Ef Gh" : "Pq Rs",
}
]
}
как я могу разобрать объект perl json, в ключах которого есть пробелы
{
"abc" : [
"lmn" : {
"Ab Cd" : "Xy Zw",
"Ef Gh" : "Pq Rs",
}
]
}
По определению, JSON анализируется с помощью парсера JSON. В CPAN существует несколько парсеров JSON, включая Cpanel::JSON::XS. . Он без проблем обрабатывает ключи с пробелами, как и любой другой парсер JSON.
Обратите внимание, что у вас есть не JSON. Я предполагаю, что ошибки являются опечатками, поскольку вы спросили о JSON.
$VAR1 -> {abc} -> {lmn} -> {Ab Cd}
должно быть $VAR1 -> {abc} -> {lmn} -> {'Ab Cd'}
. Вы можете опустить кавычки вокруг ключевого выражения, только если это слово.
- person ikegami; 06.03.2020
undef
, что может быть связано с тем, что у вас есть null
в JSON, или потому что вы ссылаетесь на несуществующий массив или хэш-элемент.
- person ikegami; 06.03.2020
Пробелы в ключе не представляют проблем для любого парсера JSON.
Однако в вашем JSON есть две проблемы, которые вызовут проблемы для любого парсера. Другие заметили лишнюю запятую после "Pq Rs"
, но у вас также есть массив, содержащий пару ключ/значение (с ключом "lnm"
), которая должна находиться внутри объекта.
Первоначально я просто удалил запятую и запустил этот код:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
use JSON;
my $json = '{
"abc" : [
"lmn" : {
"Ab Cd" : "Xy Zw",
"Ef Gh" : "Pq Rs"
}
]
}';
my $data = decode_json($json);
say Dumper $data;
Это дает ошибку:
, или ] ожидается при синтаксическом анализе массива по смещению 28 символов (перед ": {\n "Ab C...")
Я исправил это, вставив { ... }
вокруг объекта lnm
.
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
use JSON;
my $json = '{
"abc" : [ {
"lmn" : {
"Ab Cd" : "Xy Zw",
"Ef Gh" : "Pq Rs"
}
} ]
}';
my $data = decode_json($json);
say Dumper $data;
И тогда я получил этот вывод:
$VAR1 = {
'abc' => [
{
'lmn' => {
'Ab Cd' => 'Xy Zw',
'Ef Gh' => 'Pq Rs'
}
}
]
};
Чего, я думаю, вы и ожидаете.
"Pq Rs"
не должно быть запятой - person ysth   schedule 05.03.2020