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格式问题


5 回复

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

谢谢你!

回到顶部