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

2024-06-12 04:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个用Perl Dancer编写的restweb服务。它以YAML格式返回perl数据结构,还接受YAML格式的参数——它应该与其他一些使用Python查询它的团队一起工作。在

问题是——如果我只是通过Dancer的序列化返回一个常规的旧perl散列,那么一切都可以正常工作。JSON,YAML,XML。。。他们都做这项工作。在

然而,有时我们需要将Perl对象返回,Python可以将这些对象作为参数传入,以帮助处理不必要的加载等。我反复研究发现,YAML是Dancer中唯一能处理Perl祝福对象的对象。在

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

在YAML中,perl对象是这样开始的:

第一个:

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

第二:

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

它是这样错误的。在

yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:perl/hash:SDB::DBIO'

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

--- fields: library:

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


Tags: 对象yaml参数tag格式hash常规perl
1条回答
网友
1楼 · 发布于 2024-06-12 04:36:12

简单的回答是

!!tag:yaml.org,2002:的简写。。。因此!!perl/hash实际上是{}

现在您需要告诉pythonyaml如何处理这种类型

所以您可以为它添加一个构造函数,如下所示

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)

或者干脆把它解析出来或者一个也不返回。。。很难用那条线来测试。。。但这可能就是你想要的

相关问题 更多 >