我试图获取一些包含引用的JSON并解析它们。我正在使用jsonref库来做这件事。我将问题归结为以下两种情况:
import jsonref
print(jsonref.JsonRef.replace_refs(jsonref.loads('''
{
"foo": {
"$ref": "#/def/bar"
},
"def": {
"bar": "baz"
}
}
''')))
# works: {'foo': 'baz', 'def': {'bar': 'baz'}}
print(jsonref.JsonRef.replace_refs(jsonref.loads('''
{
"foo": {
"$ref": "#/def/obj"
},
"def": {
"obj": {
"bar": "baz"
}
}
}
''')))
# expected: {'foo': { 'bar': 'baz'}, 'def': {'bar': 'baz'}}
# actual: AttributeError: 'generator' object has no attribute 'get'
第一个有效,但第二个抛出错误。为什么?
@bruno的回答是有效的。但要回答“为什么”
比方说
这是因为对象还不是一个dict
这也将打破
所以一个解决办法可能是
这会将任何
JsonRef
对象转换为dict
。当然,任何其他对象也将被Json序列化。所以必须小心你是说像这样的
注意:从未使用过
jsonref
,甚至没有读过文档(!!!),因此我无法告诉为什么会出现此错误,但在文档中使用它的正确方法肯定有一些问题。但显然(从30秒的测试来看),jsonref.loads()
已经应用了引用替换,并且jsonref.JsonRef.replace_refs()
仅用于已经未序列化的对象,即:被接受的方法解决了最初的困惑。在我的例子中this answer给出了后续问题的相关线索,即将对象重新序列化为无引用JSON
我决定:
输出:
相关问题 更多 >
编程相关推荐