Python中如何解决json格式问题
希望的效果 :
{
“data”: [
{
“{#SITEURL}”: “127.0.0.1,code,port”,
“{#SITEPORT}”: “9931”
}
]
实际的效果:
{
“data”: [
{
“{#SITEURL}”: “127.0.0.1,code,port”
},
{
“{#SITEPORT}”: “9931”
}
]
脚本 :
#!/usr/bin/env python
#encoding=utf8
import os
import json
active_url = file(’/etc/zabbix/script/discovery/active_url.txt’)
active_port = file(’/etc/zabbix/script/discovery/active_port.txt’)
d01 = []
for url in active_url.readlines():
for port in active_port.readlines():
d01.append({"{#SITEURL}": url.strip()}),
d01.append({"{#SITEPORT}": port.strip()})
print json.dumps({‘data’: d01},{‘data’: d01}, sort_keys=True, indent=4, separators=(’,’, ': '))
Python中如何解决json格式问题
跟 python 没关系,跟你写的代码有关系。想往字典里加 key:value 就去操作字典,不要用 list 的 append()。
在Python中处理JSON格式问题,主要涉及json模块的使用。最常见的问题包括编码/解码错误、数据类型不兼容和格式不规范。
1. 基本读写操作:
import json
# Python对象转JSON字符串
data = {"name": "张三", "age": 25, "scores": [90, 85, 95]}
json_str = json.dumps(data, ensure_ascii=False) # 处理中文
print(json_str)
# JSON字符串转Python对象
parsed_data = json.loads(json_str)
print(parsed_data["name"])
# 文件读写
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
2. 常见问题解决:
- 中文字符问题:使用
ensure_ascii=False - 日期时间对象:需要自定义序列化
from datetime import datetime
import json
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {"time": datetime.now()}
json_str = json.dumps(data, cls=CustomEncoder)
- JSONDecodeError处理:
import json
def safe_load(json_str):
try:
return json.loads(json_str)
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
return None
3. 实用技巧:
- 使用
indent参数美化输出 sort_keys参数对键排序- 处理特殊类型(如Decimal、numpy数组)需要自定义编码器
总结:掌握json模块的基本方法,遇到特殊类型时自定义编码器。
嗯 ,刚看文章 明白了 append 的用法 ,谢啦!
_dict = {"{#SITEURL}": url.strip() ,"{#SITEPORT}": port.strip()}
d01.append(_dict)
谢谢你!

