如何在Python中将if语句添加到json字典中

时间:2015-03-09 11:23:04

标签: python json payload

是否可以使用if语句更改json字典有效内容? 我有4种类型,说ID为1,2,3,4所以我需要某种选择切换代码。

原始代码是:

payload = {
    "added": [
        {
            "assingedTargets": [
                {
                    "sequencing": 1,
                        "name": assigned_target_name,
                        "id": assigned_target_id
                    }
                ],
                "type": {
                    "protocol": {
                        "isDefaultProtocol": True,
                        "name": "tcp",
                        "id": 3,
                        "label": "tcp"
                    },
                    "name": target_type,
                    "id": int(1)
                },
              "name":"DDITargetGroup5"        
            }
        ]
        }

我想做的是:

payload = {
    "added": [
        {
            "assingedTargets": [
                {
                    "sequencing": 1,
                        "name": assigned_target_name,
                         "id": assigned_target_id
                    }
                ],
                "type": {
                    "protocol": {
                        "isDefaultProtocol": True,
                        "name": "tcp",
                        "id": 3,
                        "label": "tcp"
                    },
                    if target_type: == "direct dial" 
                      "name": target_type,
                      "id": int(1)
                    elif target_type == "private Wire"
                      "name": target_type
                      "id": int(2) 
                },
              "name":"DDITargetGroup5"        
            }
        ]
        }

我收到错误:

if target_type: == "direct dial"
             ^
SyntaxError: invalid syntax

Process finished with exit code 1

2 个答案:

答案 0 :(得分:0)

您不能将条件语句放入json对象中。相反,您应该创建一个变量来存储id值(id_val)并在使对象根据target_type的值设置其值之前使用条件。然后将字典设置为具有这些变量的值(见下文)。

id_val = 0
if target_type == 'direct dial':
    id_val = 1
elif target_type == 'private Wire':
    id_val = 2

payload = { "added": [ { "assingedTargets": [ { "sequencing": 1, "name": assigned_target_name, "id": assigned_target_id } ], "type": { "protocol": { "isDefaultProtocol": True, "name": "tcp", "id": 3, "label": "tcp" }, "name": target_type, "id": id_val }, "name":"DDITargetGroup5" } ] }

答案 1 :(得分:0)

如果只有两个选项,您可以使用三元运算符

{
     ...
     "name": target_type,
     "id": 1 if target_type == 'direct dial' else 2,
     ... 
}

但是,它带来了可读性的代价,因此您应该考虑将条件语句与字典分开是否更好。