gpt4 book ai didi

python - 如何将 Perl 祝福的对象转换为 Python 可以读取的 YAML

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:14 24 4
gpt4 key购买 nike

我们有一个用 Perl Dancer 编写的 REST Web 服务。它以 YAML 格式返回 Perl 数据结构,并接受 YAML 格式的参数 - 它应该与使用 Python 查询它的其他一些团队合作。

问题是——如果我通过 Dancer 的序列化仅传回一个常规的旧 Perl 哈希值,那么一切都工作得很好。 JSON、YAML、XML...它们都可以完成这项工作。

但是有时我们需要传回 Perl 对象,Python 稍后可以将其作为参数传回,以帮助进行不必要的加载等。我尝试了一下并发现发现 YAML 是唯一可以与 Dancer 中的 Perl 受祝福的对象一起使用的 YAML。

问题在于 Python 的 YAML 无法解析 Perl 对象的 YAML(而它可以毫无问题地处理常规的旧 Perl 哈希 YAML)。

Perl 对象在 YAML 中像这样开始:

第一个:

--- &1 !!perl/hash:Sequencing_API

第二:

---!!perl/hash:SDB::DBIO

它的错误是这样的。

yaml.constructor.ConstructorError:无法确定标记“tag:yaml.org,2002:perl/hash:SDB::DBIO”的构造函数

常规文件似乎是这样传递的:

---
字段:
库:

似乎 --- 之后的额外内容导致了问题。我可以做什么来解决这个问题?或者我是否试图通过传递 Perl 对象来做太多事情?

最佳答案

简短的答案是

!!tag:yaml.org,2002: 的 yaml 简写...因此 !!perl/hash 确实是标签:yaml.org,2002:perl/hash

现在你需要告诉 python yaml 如何处理这种类型

因此您为其添加一个构造函数,如下所示

import yaml


def construct_perl_object(loader, node):
print "S:",suffix,"N:",node
return loader.construct_yaml_node(node)#this is likely wrong ....



yaml.add_multi_constructor(u"tag:yaml.org,2002:perl/hash:SDB::DBIO", construct_perl_object)
yaml.load(yaml_string)

或者也许只是解析它或返回 None 也许...很难仅用该行进行测试...但这可能就是您正在寻找的

关于python - 如何将 Perl 祝福的对象转换为 Python 可以读取的 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com