Python中如何正确输出JSON格式数据?
想通过 python 脚本来 读取一个表格内的数据 。以 json 格式输出 ,但是这个数据需要以“,”隔开。如 : www.baidu.com,port,80 。 隔开的数据是用来传参数的 ,所以不能当字符串输出。
Python中如何正确输出JSON格式数据?
每个汉字都认识,就是不知所云
在Python里输出JSON,最直接就是用json模块的dumps()和dump()方法。
json.dumps()把Python对象(比如字典、列表)转成JSON格式的字符串,而json.dump()则直接把对象写入文件。
基本用法示例:
import json
# 你的Python数据,通常是个字典或列表
data = {
"name": "张三",
"age": 30,
"city": "北京",
"hobbies": ["阅读", "编程", "跑步"]
}
# 1. 转换为JSON字符串并打印(最常用)
json_string = json.dumps(data, ensure_ascii=False, indent=4)
print(json_string)
# 输出带缩进、中文正常显示的美化JSON
# 2. 直接写入文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
关键参数说明:
ensure_ascii=False:这个很重要! 设为False才能让中文字符正常显示,而不是变成\uXXXX的Unicode转义序列。indent=4:让输出的JSON带缩进,更易读。如果不需要格式化,去掉这个参数或者设为None,就是紧凑的一行。sort_keys=True:如果你需要让输出的字典键按字母顺序排序,可以加上这个参数。
处理特殊对象(如datetime):
JSON标准不支持Python的datetime对象,直接dumps会报错。你需要自己定义如何处理:
import json
from datetime import datetime
data = {
"event": "会议",
"time": datetime.now() # 这是一个datetime对象
}
# 方法:自定义一个处理函数,传给default参数
def json_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat() # 转换为ISO格式字符串
raise TypeError(f"Type {type(obj)} not serializable")
json_string = json.dumps(data, default=json_serializer, ensure_ascii=False)
print(json_string) # 输出:{"event": "会议", "time": "2023-10-27T10:30:00"}
一句话总结:用json.dumps(data, ensure_ascii=False, indent=4)就能搞定大部分情况,遇到日期时间这类特殊类型就自定义default处理函数。
意思是,楼主 json 键对应的值里面不能有逗号,所以不知道应该怎么存放这个数据吧?
事实上, json 键对应的值是可以有逗号的
’’’
{
“urls”: “a,b,c”
}
’’‘
这样写是没有问题的。
当然做嵌套也是可以的。
’’’
{
“urls”: [
{
“url”: “www.baidu.com”,
“port”: “80”
},
{
“url”: “www.163.com”,
“port”: “80”
}
]
}
’’’
第一个数据出来的话就成了字符串了。。。第二个可以试试
本想吐槽……
字符串出来自己转换一下不就得了, python 的 split 函数那么方便。
‘www.baidu.com,port,80’.split(’,’)
马上就能转成 list 用了,需要转换成数字的元素自己用 int 转换一下不就得了?一样很方便。
谢谢,我试试
你好,还想请教下,因为我是 print.dumps ()来输出的,请问下 .split 这个加在那个位置?
脚本内容 :
#!/usr/bin/env python
#encoding=utf8
import os
import json
active_url = file(’/etc/zabbix/script/discovery/active_url.txt’)
d01 = []
for url in active_url.readlines():
d01.append({"{#SITEURL}": url.strip()})
print json.dumps({‘data’: d01}, sort_keys=True, indent=4,)
不能理解你想要干什么。 json.dumps 出来就已经是 json 格式了,还要 split 干嘛?
如果不知道自己在干什么,建议在仔细阅读有关说明或者自己调试一下。
顺便,建议你好好提高一下提问技巧。

