使用Python设置JSON数据格式

2024-10-03 17:17:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python更改JSON格式。收到的消息有一些键值对,在转发消息之前需要更改某些键名。 对于普通的键值对,我使用了“data.pop”方法,data[“newkey”]=data.pop(“oldkey”)。 但是嵌套的键值使它变得复杂。这只是需要转换的大文件的一部分。 如何转换这个

{
"atrk1": "form_varient",
    "atrv1": "red_top",
    "atrt1": "string",
      "atrk2": "ref",
    "atrv2": "XPOWJRICW993LKJD",
    "atrt2": "string"
}

这件事

"attributes": {
        "form_varient": {
            "value": "red_top",
            "type": "string"
        },
        "ref": {
            "value": "XPOWJRICW993LKJD",
            "type": "string"
        }
    }


Tags: formrefjson消息datastringvaluetop
2条回答

如果钥匙的格式相同,你可以这样做

 d = {
    "ev": "contact_form_submitted",
    "et": "form_submit",
    "id": "cl_app_id_001",
    "uid": "cl_app_id_001-uid-001",
    "mid": "cl_app_id_001-uid-001",
    "t": "Vegefoods - Free Bootstrap 4 Template by Colorlib",
    "p": "http://shielded-eyrie-45679.herokuapp.com/contact-us",
    "l": "en-US",
    "sc": "1920 x 1080",
    "atrk1": "form_varient",
    "atrv1": "red_top",
    "atrt1": "string",
      "atrk2": "ref",
    "atrv2": "XPOWJRICW993LKJD",
    "atrt2": "string",
      "uatrk1": "name",
    "uatrv1": "iron man",
    "uatrt1": "string",
      "uatrk2": "email",
    "uatrv2": "ironman@avengers.com",
    "uatrt2": "string",
      "uatrk3": "age",
    "uatrv3": "32",
    "uatrt3": "integer"
}
    
d["attributes"] = {}
d["traits"] = {}
keys_to_remove = []
for k in d.keys():
    if k.startswith("atrk"):
        value_key = k.replace("atrk","atrv")
        type_key = k.replace("atrk","atrt")
        d["attributes"][d[k]] = {"value":d[value_key],"type":d[type_key]}
        keys_to_remove += [value_key,k,type_key]
    if k.startswith("uatrk"):
        keys_to_remove.append(k)
        value_key = k.replace("uatrk","uatrv")
        type_key = k.replace("uatrk","uatrt")
        d["traits"][d[k]] = {"value":d[value_key],"type":d[type_key]}
        keys_to_remove += [value_key,k,type_key]

for k in keys_to_remove:
    if k in d:
        del d[k]

使用以下代码,它将成功地转换它

json1={
"atrk1": "form_varient",
    "atrv1": "red_top",
    "atrt1": "string",
      "atrk2": "ref",
    "atrv2": "XPOWJRICW993LKJD",
    "atrt2": "string"
}
json2={}
keys=[]
values=[]
types=[]
for i in json1:
    if i[:4]=='atrk':
        keys.append(json1[i])
        values.append([])
        types.append([])
    elif i[:4]=='atrv':
        values[int(i[-1:])-1].append(json1[i])
    elif i[:4]=='atrt':
        types[int(i[-1:])-1].append(json1[i])

for i in range(len(keys)):
    json2[keys[i]]={
        'value':values[i],'type':types[i]
    }

json3={}
json3['attributes']=json2
print(json3)

相关问题 更多 >