簡體   English   中英

如何將受Perl祝福的對象轉換為Python可以讀取的YAML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM