0

我很欣赏将 Perl 哈希转换为 JSON 的 Java 代码示例。

很多 Perl 代码都可以做到这一点,但到目前为止还没有找到等效的 Java 代码。

示例哈希:

  {
    'connection' => {
      'activate_on_startup' => 'y',
      'alert_snmp_trap' => 'N',
      'file' => 'H:\\HLC_170_Local_01\\logs\\win_os_profile.log',
      'data_source' => {
        'params' => {
          'name' => '
                     Processor\\% Processor Time\\_Total
                    ,System\\Context Switches/sec\\-1
                    ,Processor\\Interrupts/sec\\_Total
                    ,Processor\\% Privileged Time\\_Total
                    ,Processor\\% User Time\\_Total
                    ,Processor\\Interrupts/sec\\_Total
                    ,System\\Processor Queue Length\\-1 
                    ,System\\Context Switches/sec\\-1
                    ,Memory\\Page Faults/sec\\-1
                    ,Memory\\Pages/sec\\-1
                    ,Memory\\Transition Faults/sec\\-1
                    ,Memory\\Pages Input/sec\\-1
',
          'hostname' => ''
        },
        'name' => 'perfmon'
      },
      'charting_concentrator_index' => 1,
      'delta_flag' => '',
      'connection_type' => {
        'name' => 'capture'
      },
      'active_flag' => 'y',
      'cycle' => 5,
      'alert_capture_cycle' => 2
    },
    'name' => 'SYS_WIN_OS_PROFILE'
  },
4

1 回答 1

1

你没有 Perl 哈希;你有 Perl 代码。要解析它,您需要一个 Perl 代码解析器。写作将是一项了不起的壮举。从技术上讲,能够解析 Perl 代码需要能够运行 Perl 代码,因此您需要一个完整的 Perl 解释器。

现在,这似乎是使用 Data::Dumper 创建的,因此您可以相信它只是 Perl 的一个子集。尽管如此,为此编写解析器并非易事,而请求解析器超出了 StackOverflow 的范围。

最简单的解决方案是执行以下 Perl one-liner 来执行代码并使用 JSON 对其进行序列化:

perl -0777ne'
   use JSON qw( encode_json );
   eval($_);
   die $@ if $@;
   print(encode_json($VAR1));
'

它通过 STDIN 接收代码,并将 JSON 输出到其 STDOUT。(可以删除或保留换行符和空格。)我希望这在 Java 中很容易做到。但是,如果您对此有疑问,请随时提出有关该问题的问题(在查找有关该主题的现有问题之后)。

于 2021-09-06T23:17:59.713 回答