【问题标题】:Convert multiple python strings to object将多个python字符串转换为对象
【发布时间】:2022-01-08 01:48:40
【问题描述】:



几个小时以来,我一直在寻找解决问题的方法。
你知道实现以下目标的方法或算法吗?

#Input

text1 = "network.routes.vlan[0].address"
val1 = "value1"
text2 = "network.routes.vlan[1].address"
val2 = "value2"
text3 = "network.routes.vlan[2].address"
val3 = "value3"
text3 = "network.interface.name"
val3 = "name_interface"

merge_variables_to_unique_object()

#Output

[{
    network: {
        routes : {
            vlan: [
                {
                    address: value1
                },
                {
                    address: value2
                },
                {
                    address: value3
                }
            ]
        },
        interface: {
            name: name_interface
        }
    }
}]

非常感谢您!

【问题讨论】:

  • 不,我不是学生了。
  • 我已经尝试了几个小时,因此我在这里发帖。 text = "network.routes.vlan[0].address" obj = {} txt_arr = text.split(".") for index, i in enumerate(txt_arr): if index == 0: if ((txt_arr[index] in obj) == False): obj[txt_arr[index]] = [] else: if (len(txt_arr)) == 2: obj[txt_arr[0]] = txt_arr[1] if (len(txt_arr)) == 3: obj[txt_arr[0]] = {txt_arr[1]: { txt_arr[2] : {} }} if (len(txt_arr)) == 4: obj[txt_arr[0]] = {txt_arr[1] : [{txt_arr[2] : [{txt_arr[3]}]}]}

标签: python json dictionary object


【解决方案1】:

为此,我将创建一个包含所有值的数组

values = [[text1, val1], [text2, val2], [text3, val3], [name, name_interface]]
# name and name_interface are the last two values

然后,我将让函数获取一个值列表并创建一个基本字典以将值添加到其中。

def merge_variables_to_unique_object(values: list):
    base_json = {
        "network": {
            "routes": {
                "vlan": [
                    
                ]
            },
            "interface": {
                
            }
        }
    }

之后,它只是一个简单的 for 循环,直到 values 数组的长度。在数组内部,您检查您是否位于数组的最后一个元素。如果你不是在最后,你将值添加到数组中(记住vlan 是一个字典)

base_json["network"]["routes"]["vlan"].append({values[i][0]: values[i][1]})

如果您位于数组的最后一个元素,则将值添加到接口:

base_json["network"]["interface"][values[i][0]] = values[i][1]

for 循环如下所示:

for i in range(len(values)):
    if i < len(values) - 1:
        base_json["network"]["routes"]["vlan"].append({values[i][0]: values[i][1]})
    else:
        base_json["network"]["interface"][values[i][0]] = values[i][1]

之后,您只需返回 base_json,因为它在 for 循环内被更改。

【讨论】:

  • 谢谢,这是一个好的开始!但我希望它是动态的,例如,如果我想添加一个新的text4 = network.test.container.content val4 = "value4",它会自动将自己添加到我的对象中,并为已经创建的网络创建新的属性 test、container 和 content 非常感谢提前!
【解决方案2】:

如果您想要这种语法格式的所有内容,您可以简单地将其写入文件或字符串。无论哪种方式,它都会是这样的。这是手动创建您想要的语法,您可以将其写入文件以强制通过 .json。

input1 = text1.split(".") input2 = text2.split(".") 等等

str1="[{\n\tinput1[1]: {\n\t\tinput1[2] : {\n\t\t\tinput1[3]" 以这种方式

\t 是类似于代码缩进的制表符 \n 在字符串中被解释为下一行。

这有用吗?

【讨论】:

  • 谢谢,这是一个好的开始!但是我希望它是动态的,例如,如果我想添加一个新的text4 = network.test.container.content val4 = "value4",它会自动将自己添加到我的对象中,并为已经创建的网络创建新的属性 test、container 和 content 非常感谢提前!
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多