我正在逐行阅读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中。
如果有人能帮助我,我将感激你。
答案 0 :(得分:3)
在python中,JSON对象转换为dict
,JSON列表转换为list
数据类型。
因此,如果您想检查有效 JSON 的行内容,JSON Object
或JSON 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。否则,您的测试将在第一行失败,这将只是
{