我有带有大量用户通信,参数和标志的net.json配置。看起来像这样:
/* First example */
{ "name" : "data_in", "port" : 10200, "fifo" : false },
这:
/* Second example */
{ "name" : "some_test_in", "port" : 10205, "fifo" : false, "udp" : true },
我无法删除此评论。如您所见,第二个示例具有此“ udp”:true标志。因此,我需要创建一个新的net.json配置,该配置可以插入与第一个示例相同的外观:
/* First example */
{ "name" : "data_in", "port" : 10200, "fifo" : false, "udp" : true },
但第二个示例将保持不变:
/* Second example */
{ "name" : "some_test_in", "port" : 10205, "fifo" : false, "udp" : true },
我不能使用任何其他数据包(例如jq等)。如何制作这样的脚本(python或bash)?
答案 0 :(得分:0)
这些注释是否列为dict
对象?如果是这样:
for comment in comments:
if "udp" not in comments:
comment["udp"] = True
如果将它们存储为str
,请使用json.loads
将它们转换为dict
。
答案 1 :(得分:0)
使用net.json配置上的循环,您需要检查对象是否包含属性"udp"
。一种方法是使用hasattr
a =[{ "name" : "data_in", "port" : 10200, "fifo" : False, "udp" : True },
{ "name" : "data_in", "port" : 10200, "fifo" : False}
]
b = []
for i in a :
if hasattr(i, "udp") :
b.append(i)
else :
i["udp"] = False
b.append(i)
print(b)
答案 2 :(得分:0)
使用**映射: 样本数据:
l = [
{ "name" : "data_in", "port" : 10200, "fifo" : False },
{ "name" : "some_test_in", "port" : 10205, "fifo" : False, "udp" : True },
{ "name" : "some_test_in", "port" : 10205, "fifo" : False, "udp" : False }]
如果在d中存在udp值将被更新:
[{'udp':True, **d} for d in l]
结果:
[{'fifo': False, 'name': 'data_in', 'port': 10200, 'udp': True},
{'fifo': False, 'name': 'some_test_in', 'port': 10205, 'udp': True},
{'fifo': False, 'name': 'some_test_in', 'port': 10205, 'udp': False}]