如何使用 simplejson 正确解析 JSON?
我可以有以下 JSON 字符串:
{ "response" : [ [ { "name" : "LA_",
"uid" : 123456
} ],
[ { "cid" : "1",
"name" : "Something"
} ],
[ { "cid" : 1,
"name" : "Something-else"
} ]
] }
或以下之一:
{"error":"some-error"}
{ "response" : [ [ { "name" : "LA_",
"uid" : 123456
} ],
[ { "cid" : "1",
"name" : ""
} ],
[ { "cid" : 1,
"name" : "Something-else"
} ]
] }
{ "response" : [ [ { "name" : "LA_",
"uid" : 123456
} ] ] }
因此,我不确定是否所有子项和元素都在那里。进行以下验证是否足以获得 Something
值:
if jsonstr.get('response'):
jsonstr = jsonstr.get('response')[1][0]
if jsonstr:
name = jsonstr.get('name')
if jsonstr: # I don't need empty value
# save in the database
同样可以简化吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不能保证每次解析内部对象的顺序都相同,因此索引并不是引用
name
属性设置为 < 的对象索引的安全选择。代码>某事。您无需嵌套所有这些
if
语句,而是可以使用 列表理解。请注意,如果您迭代response
键,您会得到一个列表列表,每个列表中都有一个字典:如果您索引每个列表中的第一项 (
lst[0]),您最终会得到一个对象列表:
如果您随后将
if
条件添加到列表理解中以匹配对象上的name
属性,您会得到一个列出包含所需对象的单个项目:然后通过索引最终列表中的第一项,您将获得所需的对象:
因此您可以将其转换为函数并继续您的生活:
并且它应该具有弹性,并且如果
None
找不到 >response 键:You're not guaranteed that the ordering of your inner objects will be the same every time you parse it, so indexing is not a safe bet to reference the index of the object with the
name
attribute set toSomething
.Instead of nesting all those
if
statements, you can get away with using a list comprehension. Observe that if you iterate theresponse
key, you get a list of lists, each with a dictionary inside of it:If you index the first item in each list (
lst[0]
), you end up with a list of objects:If you then add an
if
condition into your list comprehension to match thename
attribute on the objects, you get a list with a single item containing your desired object:And then by indexing the first item that final list, you get the desired object:
So then you can just turn that into a function and move on with your life:
And it should be resilient and return
None
if theresponse
key isn't found: