解析JSON并添加字符串

时间:2018-07-23 13:10:11

标签: python bash

我有带有大量用户通信,参数和标志的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)?

3 个答案:

答案 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}]