json - 将 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'}
}
如何获得上述预期输出?
解决方案
如果不使用数组,则无法将多个对象添加到单个键。您的目标 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)
推荐阅读
- emacs - 静音emacs警告
- python - 使用 BeautifulSoup 来赚取收入
- svelte - 为什么 Svelte 组件更新了变量,而实际上它没有改变?
- python - 在 nltk 模块中是否有指定的方法将 int 转换为 str ?
- reactjs - 如何通过 MaterialUI 包中的 TextField Select 类型的 onChange 调用函数
- python - 如何在 matplotlib 中从 19:00-7:00 更改绘图图表的刻度标签
- javascript - 如何在 3d 模型上放置热点?
- javascript - 数组值显示为未定义的 javasctript
- r - R/dplyr:合并并提取单个列中重复字符串值的计数总数/使用每个唯一字符串的总数创建新列
- c++ - 错误:“公共”之前的预期标识符