【问题标题】:How to convert Perl hash to JSON with Java? [closed]如何使用 Java 将 Perl 哈希转换为 JSON? [关闭]
【发布时间】:2021-11-03 19:54:21
【问题描述】:

我将不胜感激将 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'
  },

【问题讨论】:

  • 你能展示一个配置文件的样本吗?为什么需要用 Java 来做?
  • 有句老话说,唯一能够解析 Perl 的程序就是 perl。如果您打算冒险正确解析语法,祝您好运。
  • @RonWarshawsky “需要在 Java 应用程序中验证提供的 Perl 配置文件”* 是的,但为什么不让 perl 脚本读取/写入 json 文件。然后你也可以很容易地从 Java 中读取它
  • 你确定这是一个配置文件吗?它看起来像一个Data::Dumper 输出,它是供人类消费的,而不是机器读取的。无论如何,Perl 是一种编程语言,而不是一种配置语言,所以我在这里对您的设计过程有几个问题。
  • 为什么不能将 perl 数据结构(在您的示例中为 $VAR1)导出为 json 并将其写入文件,然后使用 java 读取该文件?

标签: java arrays json perl perl-hash


【解决方案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 中很容易做到。但是,如果您对此有任何疑问,请随时提出相关问题(在查找有关该主题的现有问题之后)。

【讨论】:

  • 确实是Perl hash dump格式提供的配置文件。
  • 不知道这与我的回答有什么关系
  • 使用 Perl 来做这件事很容易,但是它与 Java 核心的集成会使应用程序变得更慢(每次新的配置文件被第 3 方共享或修改时调用 Perl),加上需要在生产应用中支持 Perl 代码。
  • 然后使用合理的格式。 Data::Dumper 是一个调试工具。
猜你喜欢
  • 2012-11-11
  • 2017-01-06
  • 2013-07-09
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2014-08-21
  • 2011-12-19
相关资源
最近更新 更多