提问人:Carl Huxohl 提问时间:8/9/2023 更新时间:8/9/2023 访问量:26
在 Python 中解决 JSON null 值
Working around JSON null values in Python
问:
我有一个json文件,其中null表示没有值。当我查找的第一个值被发现为 null 时,我正在尝试从另一个字段读取。但就我而言,我无法弄清楚实现目标的语法。
>import json
>import urllib.request,urllib.parse,urllib.error
>f h=urllib.request.urlopen('http://mrdata.usgs.gov/geology/state/json/IAXs;0')
>info=json.load(fh)
>if info['age'][0][min_epoch'] == None:
> GEO_AGE = info['age'][0]['cmax_age']
>else:
> GEO_AGE = info['age'][0]['min_epoch']
>print('AGE: ', GEO_AGE)
打印结果时,结果是: AGE: 古元古代
这个结果是正确的,但出于某种原因,我无法解释...... 当“min_epoch”为空或空时,“cmax_age”字符串确实是“古元古代”
但是,当我替换以下内容时: fh = urllib.request.urlopen('http://mrdata.usgs.gov/geology/state/json/IACAe;0'
结果是相同的 AGE:古元古代
实际上,输出应该是 AGE: Middle-Cambrian
`
答:
0赞
diyImma
8/9/2023
#1
当我按照您所说的运行代码时,我得到了预期的结果:
import json
import urllib.request,urllib.parse,urllib.error
fh=urllib.request.urlopen('http://mrdata.usgs.gov/geology/state/json/IACAe;0')
info=json.load(fh)
if info['age'][0]['min_epoch'] == None:
GEO_AGE = info['age'][0]['cmax_age']
else:
GEO_AGE = info['age'][0]['min_epoch']
print('AGE: ', GEO_AGE)
年龄:中寒武纪
0赞
Ramasubramanian M
8/9/2023
#2
我没有看到您的代码有任何问题,并且可以正常工作。请参考以下内容:
import json
import urllib.request,urllib.parse,urllib.error
fh=urllib.request.urlopen('http://mrdata.usgs.gov/geology/state/json/IAXs;0')
info=json.load(fh)
if info['age'][0]['min_epoch'] == None:
GEO_AGE = 2 or info['age'][0]['cmax_age']
else:
GEO_AGE = 1 or info['age'][0]['min_epoch']
print('AGE: ', GEO_AGE)
这是另一个使用“or”的简化版本:
import json
import urllib.request,urllib.parse,urllib.error
def print_geo_age(url):
fh=urllib.request.urlopen(url)
info=json.load(fh)
GEO_AGE = info['age'][0]['min_epoch'] or info['age'][0]['cmax_age']
print('AGE: ', GEO_AGE)
if __name__ == "__main__":
print_geo_age('http://mrdata.usgs.gov/geology/state/json/IAXs;0')
print_geo_age('http://mrdata.usgs.gov/geology/state/json/IACAe;0')
评论