<p>我(有点)搞清楚了这个问题。所以我把它贴在这里,以防其他人也有同样的问题。你知道吗</p>
<p>问题似乎是没有将属性添加到<strong>dict</strong>中,因此在json过程中没有输出实际值。为了输出适当的对象,我在基类中编写了<code>to_json()</code>方法。注意:虽然我尽量保持这种通用性,但它在某种程度上特定于我的数据结构(因为我知道在给定的场景中会发生什么,而且因为我处理的是静态数据,所以我不必“证明未来”解决方案。任何采用此代码的人都应该使其适应给定的场景。你知道吗</p>
<pre><code>from eulxml import xmlmap
import inspect
import lxml
import json as JSON
class AlcalaBase(xmlmap.XmlObject):
def to_json(self, skipBegin=False):
json = list()
if not skipBegin:
json.append('{')
json.append(str.format('"{0}": {{', self.ROOT_NAME))
for attr, value in inspect.getmembers(self):
if (attr.find("_") == -1
and attr.find("serialize") == -1
and attr.find("context") == -1
and attr.find("node") == -1
and attr.find("schema") == -1):
if type(value) is xmlmap.fields.NodeList:
if len(value) > 0:
json.append(str.format('"{0}": [', attr))
for v in value:
json.append(v.to_json())
json.append(",")
json = json[:-1]
json.append("]")
else:
json.append(str.format('"{0}": null', attr))
elif (type(value) is xmlmap.fields.StringField
or type(value) is str
or type(value) is lxml.etree._ElementUnicodeResult):
value = JSON.dumps(value)
json.append(str.format('"{0}": {1}', attr, value))
elif (type(value) is xmlmap.fields.IntegerField
or type(value) is int
or type(value) is float):
json.append(str.format('"{0}": {1}', attr, value))
elif value is None:
json.append(str.format('"{0}": null', attr))
elif type(value) is list:
if len(value) > 0:
json.append(str.format('"{0}": [', attr))
for x in value:
json.append(x)
json.append(",")
json = json[:-1]
json.append("]")
else:
json.append(str.format('"{0}": null', attr))
else:
json.append(value.to_json(skipBegin=True))
json.append(",")
json = json[:-1]
if not skipBegin:
json.append('}')
json.append('}')
return ''.join(json)
</code></pre>
<p>从这个类继承的任何东西都可以序列化为json。这还假设所有对象集合都继承自这个基类(在我的特定模型中,这是真的,所以这不是问题)。你知道吗</p>