【问题标题】:Perl YAML::Syck encoded string, howto properly decode in Java using JYaml?Perl YAML::Syck 编码字符串,如何使用 JYaml 在 Java 中正确解码?
【发布时间】:2009-09-11 07:27:57
【问题描述】:

使用 beanstalkd 并将作业放入包含 YAML::Syck 编码的哈希的管/队列中(使用 $YAML::Syck::ImplicitTyping = 1)。

我需要一些 Java 端的语法帮助,关于如何解码处理从 beanstalkd 作业中提取的字符串。 Perl 哈希最终被编码为如下所示的 YAML 字符串:

--- NameFirst
--- 迈克
--- 姓氏
--- 史密斯
--- 出生日期
--- 07/07/2007

这些 YAML 记录(如上)一次只处理一个。因此,鉴于上面的字符串,我究竟如何让 JYaml 读取它,并使用以下方法解码成一个对象类:

Customer.NameFirst
Customer.NameLast
客户.DOB

【问题讨论】:

    标签: java perl yaml jyaml


    【解决方案1】:

    我怀疑您正在执行 Dump(%hash),而您应该执行 Dump(\%hash)。前者转储一个独立的交替键和值列表;后者转储散列,每个值都与一个键相关联,例如:

    ---
    DOB: 07/07/2007
    NameFirst: Mike
    NameLast: Smith
    

    【讨论】:

    • 是的,我正要编辑我原来的问题。我的 YAML 字符串现在看起来与您发布的完全一样。现在,当我使用 Java 并使用 beanstalkd 客户端获取数据时: // Grab job data byte[] dstBytes = job.getData(); // 里面的 temp 正是你上面的字符串 person = new String(dstBytes);我的类定义和 JYaml 代码将如何采用该“人”YAML 字符串,并让它响应如下内容: System.out.println(Customer.NameFirst); ??谢谢。
    • 该死,对格式化感到抱歉.. cmets 字段中没有预览。
    【解决方案2】:

    您可以考虑改用 SnakeYAML。我也通过 YAML::Syck 从 Perl 生成 YAML 以供 Java 使用。我遇到了 JYaml 的一些互操作问题,其中 YAML::Syck 生成了 JYaml 无法解析的有效 YAML。自从切换到 SnakeYAML 后,我遇到的唯一互操作问题就是 YAML::Syck 中的错误。 This answer 有更多关于我的experience with SnakeYAML 的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 2016-05-31
      • 2013-07-12
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多