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

标签 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))

最佳答案

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

关于python - json.dump() 将类型从 `dict` 更改为 `NoneType`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501604/

相关文章:

php - 将测验替代项保存为 JSON 字符串或单独的行?

json - Express bodyParser 无法正常工作

c# - NEST Elasticsearch :FilterInputs术语和术语之间的区别?

elasticsearch - Spring Data Elasticsearch @Query @Highlight

elasticsearch - "Mapping conflict!"Kibana 错误

python - 如何像 R 一样在 scikit-learn 中获得回归摘要?

python - 无法安装pyautogui

python - 客户端排序查询集,Django + TwitterBoostrap

python - 在日期时间索引上组合 DataFrame,如果索引相同,则对其他行中的值求和

javascript - 如何将 json block 作为文件发送给用户