将JSON对象列表解析为perl

时间:2016-04-25 16:31:33

标签: arrays json perl

我是Perl的新手,我想将以下JSON解析为哈希数组,(首选map方法)

[
    {   "name" : "Theodor Nelson",
        "id": "_333301",
        "address": "Hello_world"
    },
    {   "name": "Morton Heilig",
        "id": "_13204",
        "address": "Welcome"
     }
    ]

然后只想打印“

  

名称

  

ID

foreach循环中的

值。 任何形式的帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

use JSON::XS qw( decode_json );

my $data = decode_json($json);

$template->process(..., { data => $data }, ...)
   or die(...);

模板:

[% FOREACH rec IN data %]
   [% rec.id %]: [% rec.name %]
[% END %]

答案 1 :(得分:0)

color : $index === 1 ? 'red' : 'green'

根据您的使用情况,错误处理显然是可选的。一次性或手动脚本可能会死,而生产级脚本应该有适当的错误处理。

JSON模块是JSON::PPJSON::XS的包装器。它选择本地系统上可用的模块。 JSON :: XS更快,但可能没有安装。 JSON :: PP是纯Perl(没有外部C / C ++库),也是Perl核心的一部分。

代表您的顶级JSON数组的use JSON qw(from_json); # The JSON module likes to die on errors my $json_data = eval { return from_json($json); }; die "$@ while reading JSON" if $@; # Replace by your error handling die "JSON top level is no array" unless ref($json_data) eq 'ARRAY'; # Replace by your error handling for my $hashref (@{$json_data}) { print $hashref->{name}."\n"; print $hashref->{id}."\n"; } dereferences the Array-reference。每个项目都应该是哈希引用。请点击链接以获取有关每个主题的更多信息。

答案 2 :(得分:0)

你可以简单地做

use JSON qw(encode_json decode_json);

my $JSON = [{   "name" : "Theodor Nelson",
        "id": "_333301",
        "address": "Hello_world },
        {   "name": "Morton Heilig",
        "id": "_13204",
        "address": "Welcome"}]

my $decoded = decode_json $JSON;

return template 'yourtemplate', {
    options =>  $decoded,
        ..,
        ..}

在视图文件中,您可以option.idoption.nameoption.address或FOREACH循环中的任何内容访问它。