json python解析中的错误

时间:2015-03-25 22:02:35

标签: python json parsing dictionary

我已加载了JSON文件,但我无法解析它以更新或插入值。

JSON结构与此类似:

{
    "nodes": [
        {
            "id": "node1",
            "x": 21.0,
            "y": 8.0
        },
        {
            "id": "node5",
            "x": 3.0,
            "y": 5.0
        }
    ]
}

虽然我检索节点的python代码与此类似:

jsonData = defaultdict(list)
with open('data.json', 'r') as f:
    jsonData = json.load(f)
print jsonData['nodes']['id'] == 'node5'

我得到的错误是" TypeError:list indices必须是整数,而不是str"。

如何检索节点以及如何更新节点?

2 个答案:

答案 0 :(得分:1)

在您的JSON中,nodes是一个对象列表,因此您不能尝试使用类似于'id'的字符串来访问其中的元素。

相反,你可以迭代它:

with open('data.json', 'r') as f:
    jsonData = json.load(f)

for item in jsonData['nodes']:
    print item['id'], item['x'], item['y']

[编辑] 为了解决你的评论:

with open('data.json', 'r') as f:
    jsonData = json.load(f)

jsonData['nodes'] = {e['id']: e for e in jsonData['nodes']}
jsonData['nodes']['node5']['z'] = 12

答案 1 :(得分:0)

此代码段向旧节点添加新值(z = 12)并更新现有节点y

import json
from collections import defaultdict

jsonData = defaultdict(list)
with open('c:/temp/data.json', 'r') as f:
    jsonData = json.load(f)
for item in jsonData['nodes']:
    if  item['id']=='node5':
       item['y'] = 5
       item['z'] = 12