如何访问此JSON中的值?

时间:2017-02-07 15:55:52

标签: python json python-3.x

我正在从网址下载一些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
    ...

1 个答案:

答案 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异常。