使用循环时JSON中的键错误

2024-05-13 04:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试从一个大型JSON字典中提取元素,但是在python3中使用循环时,经过几次迭代后会出现“key error”。在

“label”工作正常,但当试图提取“value”时,会出现键错误。你觉得我做错什么了吗?在

我使用的JSON示例:

{ 
"@context" : "nullflood-monitoring/meta/context.jsonld" ,
"meta" : { 
"publisher" : "Environment Agency" ,
"licence" : "http://www.nationalarchives.gov.uk/doc/open-government-
licence/version/3/" ,
"documentation" : "nullflood-monitoring/doc/reference" ,
"version" : "0.9" ,
"comment" : "Status: Beta service" ,
"hasFormat" : [ "nullflood-monitoring/id/measures.csv", "nullflood-
monitoring/id/measures.rdf", "nullflood-monitoring/id/measures.ttl", 
"nullflood-monitoring/id/measures.html" ]
}
,
"items" : [ { 
"@id" : "nullflood-monitoring/id/measuresures/1029TH-level-downstage-i-
15_min-mASD" ,
"datumType" : "nullflood-monitoring/def/core/datumASD" ,
"label" : "RIVER DIKLER AT Bournemouth ON ON THE WATER - level-downstage-i-
15_min-mASD" ,
"latestReading" : { 
  "@id" : "nullflood-monitoring/data/readings/1029TH-level-downstage-i-
15_min-mASD/2018-02-10T12-00-00Z" ,
  "date" : "2018-02-10" ,
  "dateTime" : "2018-02-10T12:00:00Z" ,
  "measure" : "nullflood-monitoring/id/measures/1029TH-level-downstage-i-
15_min-mASD" ,
  "value" : -0.283
}
 ,
"notation" : "1029TH-level-downstage-i-15_min-mASD" ,
"parameter" : "level" ,
"parameterName" : "Water Level" ,
"period" : 900 ,
"qualifier" : "Downstream Stage" ,
"station" : "nullflood-monitoring/id/stations/1029TH" ,
"stationReference" : "1029TH" ,
"unit" : "http://qudt.org/1.1/vocab/unit#Meter" ,
"unitName" : "mASD" ,
"valueType" : "instantaneous"
 }
 , { 
"@id" : "nullflood-monitoring/id/measures/1029TH-level-stage-i-15_min-mASD" 
,
"datumType" : "nullflood-monitoring/def/core/datumASD" ,
"label" : "RIVER DIKLER AT BOURTON ON THE WATER - level-stage-i-15_min-mASD" 
,
"latestReading" : { 
  "@id" : "nullflood-monitoring/data/readings/1029TH-level-stage-i-15_min-
mASD/2018-02-10T12-00-00Z" ,
  "date" : "2018-02-10" ,
  "dateTime" : "2018-02-10T12:00:00Z" ,
  "measure" : "nullflood-monitoring/id/measures/1029TH-level-stage-i-15_min-
mASD" ,
  "value" : 0.245
}

到目前为止,我得到的Python代码:

^{pr2}$

我在这里的第一篇文章,如果格式不正确,我深表歉意。在


Tags: idjsonvalueoncontextminlevelstage
1条回答
网友
1楼 · 发布于 2024-05-13 04:42:27

你的JSON被破坏了,我直接从你在 one of your comments 用您的代码运行它会导致您提到的异常,然后我添加了一个异常处理代码,该代码只是继续在JSON上迭代:

data = json.loads(source)

for each in data['items']:
    try:
        label = (each['label'])
        value = (each['latestReading']['value'])
        print(label, value)
    except KeyError:
        pass

这是程序的输出结果(它太大了,所以我把它放在pastebin上):

https://pastebin.com/tGfSnZv0

我不确定输出是否理想,但我希望它能在某种程度上帮助您解决您的问题,它显然比只有6个结果更具描述性。 我的猜测是英国政府更新的JSON是不一致的,或者有一些我不知道的语法。在

相关问题 更多 >