python - 无法使用 python 从 Json 文件中获取特定值
问题描述
我很难从我的 json 文件中获取一些数据。我能够获得一些数据,但是当我想更详细地挖掘时,我遇到了错误并且卡在了哪里。
运行下面的脚本会返回错误
AttributeError: 'list' object has no attribute 'get'
我知道它是一个列表,但我不确定如何获取对象列表的其余部分。
脚本
ifile=open('source.json', 'r')
ofile=open('extract.json', 'w')
json_decode=json.load(ifile)
myresult=[]
for item in json_decode:
mydict={}
mydict['sID']=item.get('Ls id')
my_dict['dID']=item.get('items').get('Link ID').get('Metric').get('Link Type')
mydict['type']=item.get('Type')
myresult.append(mydict)
myjson=json.dumps(myresult, ofile)
ofile.write(myjson)
ofile.close()
源 Json 文件
[
{
"Ls age": "201",
"items": [
{
"Link ID": "1.1.1.2",
"Link Type": "StubNet",
"Metric": "1",
"Data": "255.255.255.255",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.4",
"Link Type": "P-2-P",
"Metric": "1",
"Data": "192.168.100.34"
},
{
"Link ID": "192.168.100.33",
"Link Type": "StubNet",
"Metric": "1",
"Data": "255.255.255.255",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.1",
"Link Type": "P-2-P",
"Metric": "1",
"Data": "192.168.100.53"
}
],
"Len": "84",
"Ls id": "1.1.1.2",
"Adv rtr": "1.1.1.2",
"Type": "Router",
"Link count": "5"
},
{
"Ls age": "1699",
"seq#": "80008d72",
"items": [
{
"Link ID": "1.1.1.1",
"Link Type": "StubNet",
"Metric": "1",
"Data": "255.255.255.255",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.1",
"Link Type": "StubNet",
"Metric": "12",
"Data": "255.255.255.255",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.3",
"Link Type": "P-2-P",
"Metric": "10",
"Data": "192.168.100.26"
},
{
"Link ID": "192.168.100.25",
"Link Type": "StubNet",
"Metric": "10",
"Data": "255.255.255.255",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.2",
"Link Type": "P-2-P",
"Metric": "10",
"Data": "192.168.100.54"
},
{
"Link ID": "192.168.100.53",
"Link Type": "StubNet",
"Metric": "10",
"Data": "255.255.255.255",
"Priority": "Medium"
}
],
"Len": "96",
"Ls id": "1.1.1.1",
"chksum": "0x16fc",
"Adv rtr": "1.1.1.1",
"Type": "Router",
"Options": "ASBR E",
"Link count": "6"
}
]
预计结果如下
[
{
"type": "Router",
"sID": "1.1.1.2",
"dID": "1.1.1.2",
"LinkType":"StubNet",
"Metric":"1"
},
{
"type": "Router",
"sID": "1.1.1.2",
"dID": "1.1.1.4",
"Link Type": "P-2-P",
"Metric": "1"
},
{
"type": "Router",
"sID": "1.1.1.2",
"dID": "192.168.100.33",
"LinkType":"StubNet",
"Metric":"1"
},
{
"type": "Router",
"sID": "1.1.1.2",
"dID":"1.1.1.1",
"Link Type": "P-2-P",
"Metric": "1"
},
{
"type": "Router",
"sID": "1.1.1.1",
"dID": "1.1.1.1",
"LinkType":"StubNet",
"Metric":"1"
},
{
"type": "Router",
"sID": "1.1.1.1",
"dID":"1.1.1.1",
"Link Type": "StubNet",
"Metric": "12"
},
{
"type": "Router",
"sID": "1.1.1.1",
"dID": "1.1.1.3",
"LinkType":"P-2-P",
"Metric":"10"
}
]
感谢建议如何进一步进行。我四处搜索并尝试错误,但仍然无法解决它。感谢您的建议和支持。谢谢
解决方案
您应该能够像字典一样访问值,例如:
ifile=open('source.json', 'r')
ofile=open('extract.json', 'w')
json_decode=json.load(ifile)
myresult=[]
for item in json_decode:
mydict={}
mydict['sID']=item['Ls id']
my_dict['dID']=item['items']['Link ID']['Metric']['Link Type']
mydict['type']=item['Type']
myresult.append(mydict)
myjson=json.dumps(myresult, ofile)
ofile.write(myjson)
ofile.close()
这对你有用吗?如果没有,您遇到了什么错误?
推荐阅读
- excel - 空白列中的 Ctrl + Down 击中幽灵单元并停止?
- java - 如何使用 setImageResource 通过 ViewHolder 设置图像
- java - Android慢匹配器正则表达式
- html - 在 Rmarkdown html 页面中的 htmltools::tagList 元素之间添加新行空格
- javascript - HTML 浏览器数据库中的 count 函数返回的计数值不正确
- reactjs - React Redux,替换状态历史
- c++ - boost::gil 是否支持 10 位图像?
- angular - Angular:stopImmediatePropagation()在keydown上不起作用
- c++ - Stringstream编译错误只发生在linux环境下
- algorithm - 我的对称加密算法安全吗?