请问python怎样动态生成下面的json啊?lsd里列表里边循环动态添加新的对象。
{
"lsd":[
{
"lsdcode":"A004",
"lsdname":"双榆树店",
"lsdwg":"193.168.4.254",
"lsdfwq": "193.168.4.3"
},
{
"lsdcode":"A026",
"lsdname":"玉泉路店",
"lsdwg":"193.168.26.254",
"lsdfwq": "193.168.26.2"
},
{
"lsdcode":"A035",
"lsdname":"学院路店",
"lsdwg":"193.168.35.254",
"lsdfwq": "193.168.35.2"
}
]
}
请指点,刚刚接触,麻烦带下注释,谢谢。
"lsd"对应的值不是个列表嘛,你使用append不就可以往里面加值
动态创建json,目前有2个问题,请帮忙解答,谢谢
问题1:字典动态添加逗号,但是多了一个逗号不知应该怎样去除。
问题2:动态生成整个json文件,但是最后多了一个]和}。
画红色圈的地方为两处问题,请帮忙解答,谢谢,感激不尽。
输出结果:
#--coding:GBK --
import os
import json
import re
import datetime,time
# 获取当前系统日期时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('js/liansuodian.json','r') as f:
data = json.load(f)
# print(json.dumps(data,indent=2))
def yunXing():
for item in data['lsd']:
# print(item['lsdwg'])
wgip = item['lsdwg']
# print(wgip)
command = os.popen("ping -n 1 " + wgip)
pin = command.read()
# 通过断网字符串判断ip地址是否互通
if "请求超时" in pin or "无法访问目标主机" in pin:
p = item['lsdcode'] + ',' + item['lsdname'] + ',' + item['lsdwg']
# p = '\''+ item['lsdcode'] + '\''+',' + '\''+item['lsdname']+ '\''+ ',' + '\''+item['lsdwg']+'\''
# print(p+'*****************')
# bytime = re.findall(r'时间=(\w)', pin, re.M)
#
# diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)
print(p,'网络不通')
p2 = {}
douhao = ','
p2['lsdcode'] = item['lsdcode']
p2['lsdname'] = item['lsdname']
p2['lsdwg'] = item['lsdwg']
print(p2)
print(item['lsdname'])
with open('log/lixian.json','r+') as f:
# f.seek(0)
f.write('{\n"lsd":[\n')
for x in p2:
json.dump(p2,f,indent=4,ensure_ascii=False)
f.write(douhao)
# print(type(p2))
# f.write('\n]\n}')
else:
# 网络通
p = item['lsdcode'] + ',' + item['lsdname'] + ',' + item['lsdwg']+ ',' + now
bytime = re.findall(r'时间=(\w)', pin, re.M)
# print(bytime)
diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)
# print(diushi)
int_bytime = int(bytime[0])
if int_bytime > 3:
print(p,'网络延时')
with open('log/yanshi.txt', 'r+') as file:
file.truncate(0)
file.write(p + "\n")
file.close()
else:
print(p,'网络正常')
# print(diushi)
while True:
yunXing()
# 5分钟循环执行一次
time.sleep(300)