json.dump()将类型从`dict`更改为`NoneType`

时间:2015-04-07 21:26:40

标签: python json elasticsearch kibana kibana-4

我有一个用于操作JSON文件的小python程序。我发现当我使用json.dump()将操纵数据转储回JSON文件时,它会更改为<type 'NoneType'>。以下数据的原始类型(json_data的类型)为<type 'dict'>。我将这些JSON文档存储在elasticsearch中,并使用Kibana4将其可视化.Kibana4将新添加的整数字段视为字符串。有人在此之前遇到过这个问题。

import json                                                                                                                                                                                    

fname = "json_data.txt"
with open(fname, 'r+') as f:
    json_data = json.load(f)
    print(type(json_data))
    #Code to add fields to json files.   
    f.seek(0)
    x = json.dump(json_data,f,ensure_ascii=True)
    print(type(x))

2 个答案:

答案 0 :(得分:5)

json.dump()没有返回值。它将写入文件,而不是返回转储的对象。

因此,可以返回可调用的默认返回值,None

换句话说,您的代码完全按照您的要求执行:读取JSON数据并解析它,结果存储在json_data中。然后,将该Python对象写回文件中。 json.dump()的返回值与此无关,您仍然可以引用json_data

如果您想要一个包含JSON对象的字符串值,请使用json.dumps()(注意s);这将返回生成的JSON字符串,而不写入文件:

fname = "json_data.txt"
with open(fname, 'r') as f:
    json_data = json.load(f)
    print(type(json_data))

json_string = json.dumps(json_data)
print(type(json_string))

答案 1 :(得分:2)

我认为json.dump()没有返回值。你可能正在寻找json.dumps()