使用して作成する python オブジェクトのセットがありますeulxml.xmlmap.XmlObject
(主にこの方法を使用するのは、eXistDB サーバーで作業しており、eulxml が非常に簡単なマッピング機能を提供するためです)。eXistDB を正常にクエリし、作成したいくつかの python オブジェクトに xquery 結果セットをロードできます。私の問題は、これらのオブジェクトをWebサーバーに渡すときに、これらのオブジェクトをJSONとして書き出せるようにしたいことです(フロントエンドにAngularを使用)。
jsonpickle を使用してみましたが、eulxml がある種の遅延読み込みマジックを行っているようです。オブジェクトを json にシリアル化するために jsonpickle を標準的に呼び出すと、次の結果が得られます。
パイソンコード:
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 を指定するだけで済みます)。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')