【问题标题】:How to check whether a json object is array如何检查json对象是否为数组
【发布时间】:2015-04-02 23:57:46
【问题描述】:

我是python新手。我在将json arraylist obect从java发送到python时遇到了这个问题。从java发送json对象时,arraylist的json结构是

[{'firstObject' : 'firstVal'}]

但是当我在 python 中收到它时,我得到的值是

{'listName':{'firstObject':'firstVal'}}

当我像这样在数组中传递多个对象时:

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

我从 python 端接收 json 作为

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

我不知道为什么会发生这种情况。谁能帮助我将第一种情况设为数组对象或找出 json 变量是否为数组类型的方法。

【问题讨论】:

  • 我认为这取决于您的 Java 代码,而不是 Python。无论发出这个 JSON 是什么,都将"listName" 添加到结构中。
  • 注意:[{'firstObject' : 'firstVal'}] 不是正确的 json(json 不使用单引号作为字符串)。你如何观察从 java 发送的内容?

标签: python json python-3.x scripting


【解决方案1】:

Python 中的json 模块不会改变结构:

assert type(json.loads('[{"firstObject": "firstVal"}]')) == list

如果您看到{'listName':{'firstObject':'firstVal'}},那么某些东西(在 java 中或在 python 中(在您的应用程序代码中))会更改输出/输入。

注意:将'listName' 值解压缩为shown in @Fawers' answer 很容易,但您不应该这样做。改正产生错误值的上游代码。

【讨论】:

    【解决方案2】:

    每当您使用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']
    

    这应该会给你想要的结果。

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 2012-06-26
      • 2011-05-16
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多