如何从 JSON 中提取循环密钥?
How do I pull a recurring key from a JSON?
我是 python 的新手(和一般的编码),我已经走到这一步了,但我遇到了麻烦。我正在查询 return 一个包含每个员工信息的 json 文件的 Web 服务。我只想为每位员工提取几个属性,但我遇到了一些麻烦。
目前我有这个脚本:
import json
import urllib2
req = urllib2.Request('http://server.company.com/api')
response = urllib2.urlopen(req)
the_page = response.read()
j = json.loads(the_page)
print j[1]['name']
它 return 看起来像这样的 JSON...
{
"name": bill jones,
"address": "123 something st",
"city": "somewhere",
"state": "somestate",
"zip": "12345",
"phone_number": "800-555-1234",
},
{
"name": jane doe,
"address": "456 another ave",
"city": "metropolis",
"state": "ny",
"zip": "10001",
"phone_number": "555-555-5554",
},
您可以看到,使用脚本我可以 return 索引 1 中的员工姓名。但是我想要更多类似以下内容的内容:print j[**0 through len(j)**]['name']
所以它会打印出来json 列表中每位员工的姓名(最好还有 phone 编号)。
我很确定我做错了什么,但我需要一些反馈和指导。
您的 JSON 是 dict
个对象中的 list
个。通过执行 j[1]
,您将访问列表中位于索引 1
的项目。为了得到所有的记录,需要迭代列表的所有元素为:
for item in j:
print item['name']
其中 j
是 j = json.loads(the_page)
的结果,正如您在回答中提到的
比重复 dict
查找稍微好一点
from future_builtins import map # Only on Py2, to get lazy, generator based map
from operator import itemgetter
for name, phone_number in map(itemgetter('name', 'phone_number'), j):
print name, phone_number
如果您需要根据需要查找个别内容(因此您并不总是需要 name
或 phone_number
),那么常规 dict
查找就有意义了,这只是通过将工作推送到内置函数来优化您总是检索同一组项目的情况(在 CPython 参考解释器上,它们是用 C 实现的,因此它们 运行 比手动代码快一点) .使用基于 map
的生成器并不是绝对必要的,但它可以避免在您只是要迭代结果时制作(可能很大的)临时 list
s。
它基本上只是一个更快的版本:
for emp in j:
name, phone_number = emp['name'], emp['phone_number']
print name, phone_number
我是 python 的新手(和一般的编码),我已经走到这一步了,但我遇到了麻烦。我正在查询 return 一个包含每个员工信息的 json 文件的 Web 服务。我只想为每位员工提取几个属性,但我遇到了一些麻烦。
目前我有这个脚本:
import json
import urllib2
req = urllib2.Request('http://server.company.com/api')
response = urllib2.urlopen(req)
the_page = response.read()
j = json.loads(the_page)
print j[1]['name']
它 return 看起来像这样的 JSON...
{
"name": bill jones,
"address": "123 something st",
"city": "somewhere",
"state": "somestate",
"zip": "12345",
"phone_number": "800-555-1234",
},
{
"name": jane doe,
"address": "456 another ave",
"city": "metropolis",
"state": "ny",
"zip": "10001",
"phone_number": "555-555-5554",
},
您可以看到,使用脚本我可以 return 索引 1 中的员工姓名。但是我想要更多类似以下内容的内容:print j[**0 through len(j)**]['name']
所以它会打印出来json 列表中每位员工的姓名(最好还有 phone 编号)。
我很确定我做错了什么,但我需要一些反馈和指导。
您的 JSON 是 dict
个对象中的 list
个。通过执行 j[1]
,您将访问列表中位于索引 1
的项目。为了得到所有的记录,需要迭代列表的所有元素为:
for item in j:
print item['name']
其中 j
是 j = json.loads(the_page)
的结果,正如您在回答中提到的
dict
查找稍微好一点
from future_builtins import map # Only on Py2, to get lazy, generator based map
from operator import itemgetter
for name, phone_number in map(itemgetter('name', 'phone_number'), j):
print name, phone_number
如果您需要根据需要查找个别内容(因此您并不总是需要 name
或 phone_number
),那么常规 dict
查找就有意义了,这只是通过将工作推送到内置函数来优化您总是检索同一组项目的情况(在 CPython 参考解释器上,它们是用 C 实现的,因此它们 运行 比手动代码快一点) .使用基于 map
的生成器并不是绝对必要的,但它可以避免在您只是要迭代结果时制作(可能很大的)临时 list
s。
它基本上只是一个更快的版本:
for emp in j:
name, phone_number = emp['name'], emp['phone_number']
print name, phone_number