[英]How to turn Perl blessed objects into YAML that Python can read
我們有一個用Perl Dancer編寫的REST Web服務。 它以YAML格式返回perl數據結構,並以YAML格式接收參數-應該與其他一些使用Python查詢它的團隊一起使用。
這就是問題所在-如果我通過Dancer的序列化僅回傳一個常規的舊Perl哈希,則一切工作都很好。 JSON,YAML,XML ...它們都能完成任務。
但是 , 有時我們需要將Perl對象傳遞回去 ,Python以后可以將其作為參數傳遞回去,以幫助進行不必要的加載等。我玩弄了一下,發現YAML是唯一與Dancer中Perl的祝福對象一起使用的對象。
問題在於,Python的YAML無法解析Perl對象的YAML(而它可以毫無問題地處理常規的舊Perl哈希YAML)。
Perl對象在YAML中以如下方式開始:
第一:
--- &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對象做太多事情?
簡短的答案是
!!
是tag:yaml.org,2002:
yaml簡寫tag:yaml.org,2002:
...就這樣!!perl/hash
實際上是tag: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……僅用那條線很難測試...但這可能就是您想要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.