【问题标题】:loop over JSON using Perl [duplicate]使用Perl [重复]循环json
【发布时间】:2012-07-23 10:12:53
【问题描述】:

我是 Perl 的新手,我想遍历这个 JSON 数据并将其打印到屏幕上。

我该怎么做?

$arr = '[{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}]';

【问题讨论】:

  • 如果你想在 Perl 中使用它,那么为什么要使用 JavaScript 标签?
  • 在计算机科学中,我们一直在寻找更通用的问题解决方案,这通常涉及从更通用的角度看待问题。您遇到的具体问题是不知道如何解析 JSON,具体解决方案在您接受的答案中提供。但更普遍的问题是不知道在哪里可以找到 Perl 工具。更通用的解决方案是熟悉一个 CPAN 搜索站点,例如 metacpan.org

标签: json perl


【解决方案1】:

使用JSON 或JSON::XS 将JSON 解码为Perl 结构。

简单示例:

use strict;
use warnings;

use JSON::XS;

my $json = '[{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}]';

my $arrayref = decode_json $json;

foreach my $item( @$arrayref ) { 
    # fields are in $item->{Year}, $item->{Quarter}, etc.
}

【讨论】:

    【解决方案2】:

    你有一个哈希数组。

    use JSON::XS qw( decode_json );
    
    my $records = decode_json($json_text);
    for my $record (@$records) {
       for my $key (keys(%$record)) {
          my $val = $record->{$key};
          say "$key: $val";
        }
    }
    

    JSON::XS

    【讨论】:

      【解决方案3】:

      这是 CPAN 上的一个包,应该可以解决问题,JSON.pm

      一旦你解析它,你就可以像对待任何其他 Perl 引用一样对待它。

      示例

      $perl_scalar = $json->decode($json_text)
      

      文档

      与编码相反:期望一个 JSON 文本并尝试解析它, 返回生成的简单标量或引用。错误的呱呱叫。

      JSON 数字和字符串变成简单的 Perl 标量。 JSON 数组变成 Perl arrayrefs,JSON 对象变成 Perl hashrefs。真的 变为 1 (JSON::true),false 变为 0 (JSON::false),null 变为 undef.`

      类似的堆栈溢出问题: Parsing an array encoded in JSON

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 2021-03-20
        • 2016-06-22
        • 1970-01-01
        • 2019-02-07
        相关资源
        最近更新 更多