簡體   English   中英

轉換 JSON 鍵和值

[英]Transforming JSON keys and values

我在 python 中有一個簡單的 json,看起來像:

{
    "list": [{
            "key1": "value1"
        },
        {
            "key1": "value1"
        }
    ]
}

我想將其轉換為以下 json。 任何建議如何在不安裝其他庫的情況下使用 python 來完成?

{
    "list": [{
        "keys": {
            "name": "key1",
            "value": "value1"
        }
    }, {
        "keys": {
            "name": "key1",
            "value": "value1"
        }
    }]
}

從你的問題中不確定你是否已經將 json 讀入了一個變量,或者它是否在一個文件中。 這是假設你已經在一個變量中了:

in_json = {
    "list": [{
            "key1": "value1"
        },
        {
            "key2": "value2"
        }
    ]
}

out_json = {"list":[]}
for kd in in_json["list"]:
    sub_kd = {"keys": {}}
    for k,v in kd.iteritems():
        sub_kd["keys"]["name"] = k
        sub_kd["keys"]["value"] = v

    out_json["list"].append(sub_kd)

print(out_json)

它只是遍歷 json 制作字典以附加到out_json字典。 你可以用 json 庫使這個打印漂亮,也可以用它保存到文件

您沒有准確指出 JSON 數據的具體內容,因此我在下面的示例代碼中將其全部放入一個字符串中,並使用json.loads()函數將其轉換為 Python 字典。 如果它在文件中,您可以改用模塊的json.load()函數。

它還假設"list"列表中的每個子 JSON 對象僅包含一個鍵/值對,如您的問題所示。

下面的代碼就地更改反序列化的字典並通過使用json.dumps()函數重新序列化它來漂亮地打印結果。

請注意,我稍微更改了示例輸入 JSON 中的鍵和值,以便更容易查看它與打印結果之間的對應關系。

import json


json_in = '''
    {
        "list": [
            {
                "key1": "value1"
            },
            {
                "key2": "value2"
            }
        ]
    }
'''

json_data = json.loads(json_in)  # Deserialize.

for i, obj in enumerate(json_data['list']):
    # Assumes each object in list contains only one key, value pair.
    newobj = { 'name': next(iter(obj.keys())),
              'value': next(iter(obj.values()))}
    json_data['list'][i] = {'keys': newobj}

print(json.dumps(json_data, indent=4))  # Reserialize and print.

打印結果:

{
    "list": [
        {
            "keys": {
                "name": "key1",
                "value": "value1"
            }
        },
        {
            "keys": {
                "name": "key2",
                "value": "value2"
            }
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM