【问题标题】:How can I access values in this JSON?如何访问此 JSON 中的值?
【发布时间】:2017-02-08 00:01:25
【问题描述】:

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

【问题讨论】:

  • j 是一本字典。你可以循环j.items()
  • @cricket_007 谢谢,这正是我需要的……但我是一个 python 新手,所以甚至不知道如何使用它!

标签: python json python-3.x


【解决方案1】:

当值的实例是列表时,您可以遍历 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 异常。

【讨论】:

  • @pookie,不客气。另一个提示:如果您有一些其他类型,例如 dict,您也可以扩展您的代码(如果检查是 isinstance,则另一种)来支持这一点。
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2020-07-16
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多