首页 > 解决方案 > 将 Json 字符串分配给单个键

问题描述

下面是我的 python 代码,它从文件中读取数据并转换为 JSON

json_data = {}

data ={}

with open("json_content.txt","r") as fp:

    for line in fp.readlines():
     if line != '\n':
       line=line.strip()
       split_data = line.split(':',)
       json_data[split_data[0].strip()] = split_data[1].split('\n')[0].strip()
       data['description']=json_data
      elif line == '\n':
       print(data)

我的python代码给了我如下输出

{'description': {'mount_disk': '/data', 'actual_size': '2.5T', 'fsystem': '/dev/sdb'}}
{'description': {'mount_disk': '/data', 'actual_size': '1.5T', 'fsystem': '/dev/sdb'}}
{'description': {'mount_disk': '/data', 'actual_size': '3.5T', 'fsystem': '/dev/sdb'}}

但我正在寻找如下输出

{'description': 

    { 'mount_disk': '/data', 'actual_size': '2.5T', 'fsystem': '/dev/sdb'}
    { 'mount_disk': '/data', 'actual_size': '1.5T', 'fsystem': '/dev/sdb'}
    { 'mount_disk': '/data', 'actual_size': '3.5T', 'fsystem': '/dev/sdb'}
}

如何获得上述预期输出?

标签: jsonpython-3.xpython-2.7

解决方案


如果不使用数组,则无法将多个对象添加到单个键。您的目标 JSON 结构必须如下所示:

{
  "description": [
    {"mount_disk": "/data", "actual_size": "2.5T", "fsystem": "/dev/sdb"},
    {"mount_disk": "/data", "actual_size": "2.5T", "fsystem": "/dev/sdb"},
    ...
  ]
}

因此,您data在 python 中的对象应该包含一个列表,description其中包含您将添加每个对象的键:

json_data = {}
data = {"description": []}

with open("json_content.txt","r") as fp:
    for line in fp.readlines():
        if line != '\n':
            line=line.strip()
            split_data = line.split(':',)
            json_data[split_data[0].strip()] = split_data[1].split('\n')[0].strip()
            data['description'].append(json_data)
         elif line == '\n':
            print(data)

推荐阅读