【问题标题】:string is a JSON object or JSON array in Python?string 是 Python 中的 JSON 对象还是 JSON 数组?
【发布时间】:2016-10-15 08:50:32
【问题描述】:

我正在逐行读取 JSON 文件。几行包含 JSON 对象,而其他行包含 JSON 数组。我正在使用 json.loads(line) 函数从每一行获取 JSON。

def read_json_file(file_name):
    json_file = []
    with open(file_name) as f:
        for line in f:
            json_file.append((line))

    json_array = []
    for obj in json_file:
        try:
            json_array.append(json.loads(obj))
        except ValueError:
            print("data was not valid JSON")

    return json_array

有什么方法可以找出我正在阅读的对象是 JSON 对象还是 JSON 数组?我想将所有结果保存在 json_array 中。

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 请发布您当前的代码
  • 您可以使用the conversion table检查类型
  • @jamylak 我用代码编辑了问题。
  • 你为什么要逐行阅读?那是一个包含许多由换行符分隔的 JSON 的文件吗?
  • @zvone 是的,有些行有简单的 JSON 对象,而其他行有 JSON 数组。但是这些 JSON 数组对象也是逐行放置的

标签: python json python-3.x


【解决方案1】:

在python中,JSON对象转换为dict,JSON列表转换为list数据类型。

所以,如果你想检查应该是有效的 JSON 的行内容是 JSON ObjectJSON Array,那么这段代码将帮助你:-

import json

# assume that, each line is valid json data
obj = json.loads(line)

# if returns true, then JSON Array
isinstance(obj, list)

# if returns true, then JSON Object.
isinstance(obj, dict)

【讨论】:

  • 我的问题使用 isintance() 解决了。非常感谢你
【解决方案2】:

您的代码的问题 - 如果行不包含 full JSON 对象 - 它很少包含 - 它几乎总是会失败。

与 Java 不同,在 Python 中 JSON 自然地由列表和字典元素的分层混合表示。因此,如果您在 JSON 中查找列表元素,您可以使用递归搜索。

如果你想检查你的文件是否是有效的 JSON - 下面的代码更简单更短的测试

try:
    with open(file_name) as f:
        json_obj = json.load(f)
    except:
        print "Not valid JSON"

编辑 是 JSON 文件还是 JSON 模式?

在后者中,您可以只检查您的对象是否为列表

obj = json.loads(line)
isintance(obj, list)

正如我已经说过的,Python 中没有“JSON 对象”这样的东西

PS 如果您逐行读取文件,并且每一行都是 JSON 对象 - 它不是 JSON 文件,而是每个字符串都包含 JSON 的文件。否则,您的测试将在第一行失败,这将只是

{

【讨论】:

  • 行包含完整的 json 对象。但很少有其他行包含 JSON 数组。我知道如何检查有效性。如何检查我读到的对象是JSON对象还是JSON数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多