string是Python中的JSON对象还是JSON数组?

时间:2016-10-15 08:50:32

标签: python json python-3.x

我正在逐行阅读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中。

如果有人能帮助我,我将感激你。

2 个答案:

答案 0 :(得分:3)

在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)

答案 1 :(得分:0)

您的代码存在问题 - 如果行不包含完整 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。否则,您的测试将在第一行失败,这将只是

{