Доступ к ключу JSON :: Path only - PullRequest
7 голосов
/ 17 апреля 2019

Каков правильный синтаксис для доступа к ключу json, который имеет только числа с модулем Perl6 JSON :: Path?Я получаю "Ошибка синтаксического анализа пути JSON в позиции 6".

Я хотел бы получить доступ к пунктам-> 2018-> имя:

use JSON::Path;

my Str $json = 「
{
  "items" : {
    "old"  : { "name" : "olditem" },
    "2017" : { "name" : "item1"   },
    "2018" : { "name" : "item2"   },
    "2019" : { "name" : "item3"   }
  }
}
」;

все в порядке

#("olditem", "item3", "item1", "item2")
my JSON::Path $jp .= new: '.items[*].name';
say $jp.values($json);

также в порядке

#("olditem")
$jp .=  new: '.items.old.name';
say $jp.values($json);

ничего не возвращает

#()
$jp .= new: ".items['2018'].name";
say $jp.values($json);

ошибки

#JSON path parse error at position 6
try {
    $jp .= new: ".items.2018.name";
    CATCH {
        default { .Str.say }
    }
}

ошибки также:

#JSON path parse error at position 6
try {
    $jp .= new: ".items.['2018'].name";
    CATCH {
        default { .Str.say }
    }
}

полный вывод ошибок:

#`[
JSON path parse error at position 6
  in method giveup at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 43
  in regex commandtree at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 15
  in regex commandtree at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 15
  in regex TOP at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 11
  in submethod TWEAK at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 205
  in method new at /tmp/.perl6/sources/B8E23055698DB40383876C0A68B2471D693FDC54 (JSON::Path) line 200
  in block <unit> at test4 line 42
]
$jp .= new: ".items.['2018'].name";

1 Ответ

8 голосов
/ 18 апреля 2019

Синтаксис попытался:

$jp .= new: ".items['2018'].name";
say $jp.values($json);

Было правильно, однако в JSON::Path была ошибка. Это было решено в версии 1.6 модуля.

...