我有一组我使用创建的 python 对象eulxml.xmlmap.XmlObject
(我使用这种方法主要是因为我正在使用 eXistDB 服务器并且 eulxml 提供了一个非常简单的映射功能)。我能够成功查询我的 eXistDB 并将 xquery 结果集加载到我创建的一些 python 对象中。我的问题是,当我将这些对象传递给网络服务器时(使用 Angular 作为前端),我希望能够将这些对象作为 JSON 写出来。
我试过使用 jsonpickle 但似乎 eulxml 正在做某种延迟加载魔法。对 jsonpickle 将我的对象序列化为 json 的标准调用给了我这个结果:
蟒蛇代码:
jsonpickle.encode(myObject)
结果:
"py/object": "models.alcalaPage.AlcalaPage", "context":
{"namespaces":
{"exist": "http://exist.sourceforge.net/NS/exist"}
},
"node": {
"py/object": "lxml.etree._Element",
"py/seq": [
{"py/object": "lxml.etree._Comment", "py/seq": []},
{"py/object": "lxml.etree._Element", "py/seq": []},
...
]
}...
它似乎只输出属性的类型,而不是属性本身的值。如果我将我的 jsonpickle 代码更改为设置 unpickable=False,我得到的只是一组空的 json(这意味着结构存在于正确数量的花括号和方括号中,但实际上没有数据。json 输出是只是花括号和方括号)。
我想也许如果我尝试访问该字段中的一个值,然后输出可能有效的 json(至少对于我访问的字段)但没有运气。我得到与上述相同的结果(是的,我已经仔细检查过对象本身是否有数据)。
在这一点上,我有点不知所措。我可以迁移到 BeautifulSoup 之类的东西,但这意味着要编写更多代码(eulxml 让我只需将 xpath 指定为我想要填充属性的值和 bing,我就完成了)。jsonpickle 有什么我缺少的吗?还是我应该看看另一个 json 包?或者,也许我让这种方式变得比我需要的更困难,还有其他方法可以使用 python 查询 eXistDB,然后将信息发送到使用 Angular 构建的前端应用程序。我愿意接受建议。
我将在下面包含我的代码示例(我不会包含所有代码,因为我可能正在使用 10 多个对象):
带有 eulxml 的示例对象代码:
import jsonpickle
from eulxml.xmlmap import XmlObject
class AlcalaBase(XmlObject):
def to_xml(self):
return self.serializeDocument(pretty=True)
def to_json(self):
return jsonpickle.encode(self)
from eulxml import xmlmap
from models.alcalaBase import AlcalaBase
class AlcalaPage(AlcalaBase):
ROOT_NAME = 'page'
id = xmlmap.StringField('pageID')
archive_page_number = xmlmap.StringField('archivistsPageNumber')
year = xmlmap.IntegerField('content/@yearID')