如何检查一个 JSON 对象是否为数组

10

我是一名新手Python开发者。在将Java中的JSON数组列表对象发送到Python时,遇到了这个问题。从Java发送JSON对象时,ArrayList的JSON结构如下:

[{'firstObject' : 'firstVal'}]

但是当我在Python中接收它时,我得到的值为
{'listName':{'firstObject':'firstVal'}}

当我像这样传递多个对象数组时: ```javascript 当我像这样传递多个对象数组时: ```
[{'firstObject' : 'firstVal'},{'secondObject' : 'secondVal'}]

我从Python端收到的JSON格式数据如下:

{'listName':[{'firstObject':'firstVal'},{'secondObject' : 'secondVal'}]}    

我无法弄清楚为什么会发生这种情况。是否有人可以帮我找到一种方法,将第一个案例转换为数组对象或者找到一种判断 JSON 变量是否为数组类型的方法。


我认为这取决于你的Java代码,而不是Python。无论是什么在生成这个JSON时都将“listName”添加到结构中。 - bheklilr
注意:[{'firstObject' : 'firstVal'}] 不是一个正确的 JSON(JSON 不使用单引号表示字符串)。你如何观察从 Java 发送的内容? - jfs
2个回答

11
无论何时你使用`json`模块的`load`(或`loads`)函数,都会得到一个`dict`或一个`list`对象。为了确保你得到的是一个包含`listName`元素的列表而不是字典,你可以按照以下方式操作:
import json

jsonfile = open(...) # <- your json file
json_obj = json.load(jsonfile)

if isinstance(json_obj, dict) and 'listName' in json_obj:
    json_obj = json_obj['listName']

那应该能给你想要的结果。

3
Python中的json模块不会改变结构:
assert type(json.loads('[{"firstObject": "firstVal"}]')) == list

如果你看到了{'listName':{'firstObject':'firstVal'}},那么某个东西(无论是在Java还是Python中(在你的应用程序代码中))都会改变输出/输入。

注意:可以像Fawers的回答所示,轻松解压缩'listName'的值,但你不应该这样做。而应该修复产生错误值的上游代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接