我正在从网址下载一些JSON:
from urllib.request import Request, urlopen
import json
url = 'xyz'
r = Request(url, headers={'User-Agent':'Mozilla/5.0'})
weburl = urlopen(r)
dat = weburl.read()
encoding = weburl.info().get_content_charset('utf-8')
j = json.loads(data.decode(encoding))
print(j)
这会产生类似:
{
"foo":123,
"bar":4,
"c640103":[5,"xyz", 85.6 ... ],
"c63f456":[8,"pyz", 45.6 ... ],
"c63fdfd":[2,"xhk", 42.8 ... ],
"c64088a":[9,"vyi", 61.1 ... ],
"c63eb0c":[1,"xeq", 25.4 ... ]
}
可以看出,bar
之后的键有点奇怪。我不知道事先知道它们是什么或可能是什么。
如何将foo作为变量,然后将bar作为变量,然后获取每个那些不稳定的键及其数组?
我想得到这样的东西:
foo = j['foo']
bar = j['bar']
wonky_keys = j['wonky_keys']
for i in wonky_keys:
print(i[0]) //5
print(i[1]) //xyz
...
答案 0 :(得分:0)
如果值的实例是列表而不是通过列表元素运行,则可以运行json对象,如果它不是列表而不是仅打印简单值。
js = {
"foo":123,
"bar":4,
"c640103":[5,"xyz", 85.6 ],
"c63f456":[8,"pyz", 45.6 ],
"c63fdfd":[2,"xhk", 42.8 ],
"c64088a":[9,"vyi", 61.1],
"c63eb0c":[1,"xeq", 25.4]
}
for elem in js:
if isinstance(js[elem], list):
for elem_li_item in js[elem]:
print (elem_li_item)
else:
print (js[elem])
您也可以使用js.items()
执行此操作:
for k,v in js.items():
if isinstance(v, list):
for elem_li_item in v:
print (elem_li_item)
else:
print (v)
isinstance(object,classinfo)
如果object参数是classinfo的实例,则返回true 参数,或其(直接,间接或虚拟)子类。也 如果classinfo是类型对象(新样式类)和对象,则返回true 是该类型或(直接,间接或虚拟)的对象 其子类。如果object不是类实例或对象 给定的类型,函数总是返回false。如果classinfo是 类或类型对象的元组(或递归,其他此类元组), 如果object是任何类或类型的实例,则返回true。 如果classinfo不是类,类型或类的类,类型或元组 这样的元组会引发TypeError异常。