【发布时间】:2015-07-25 14:10:35
【问题描述】:
我正在使用 Python API Wrapper 来获取汽车模型的 JSON 响应。根据搜索的汽车,我可以获得 0 到 50 个“ID”结果。如何从我的字符串中提取第一次出现的 ID 而忽略所有其他的?
API 包装器(来自 GitHub):
# Make API Call
....
....
# extract JSON
try:
response_json = r.json()
print response_json
我进行了一些搜索,但我看到的大多数解决方案都非常复杂。拆分字符串,迭代,将其转换回打印语句。如果您愿意,还有更简单的 search_mystring('id') 方法吗?
我的字符串(response_json):
{u'styles': [{u'trim': u'EX', u'name': u'EX 4dr Sedan (2.3L 4cyl 4A)', u'make':
{u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 100001210,
u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u
'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'm
odelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'EX', u'name': u
'EX 2dr Coupe w/Leather (2.3L 4cyl 5M)', u'make': {u'id': 200001444, u'niceName'
: u'honda', u'name': u'Honda'}, u'id': 100001209, u'year': {u'id': 100000126, u'
year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name'
: u'Accord'}, u'submodel': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'
niceName': u'coupe'}}, {u'trim': u'EX', u'name': u'EX 4dr Sedan w/Leather (2.3L
4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}
, u'id': 100001212, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id'
: u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'
body': u'Sedan', u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim
': u'EX', u'name': u'EX 4dr Sedan (2.3L 4cyl 5M)', u'make': {u'id': 200001444, u
'niceName': u'honda', u'name': u'Honda'}, u'id': 100001211, u'year': {u'id': 100
000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord
', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord
Sedan', u'niceName': u'sedan'}}, {u'trim': u'EX V-6', u'name': u'EX V-6 2dr Coup
e (3.0L 6cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'honda', u'name': u
'Honda'}, u'id': 100001214, u'year': {u'id': 100000126, u'year': 2001}, u'model'
: {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'submod
el': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'niceName': u'coupe'}},
{u'trim': u'EX', u'name': u'EX 4dr Sedan w/Leather (2.3L 4cyl 5M)', u'make': {u
'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 100001213, u'
year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'n
iceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'mod
elName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'LX', u'name': u'L
X 2dr Coupe (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'honda',
u'name': u'Honda'}, u'id': 100001216, u'year': {u'id': 100000126, u'year': 2001}
, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}
, u'submodel': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'niceName': u
'coupe'}}, {u'trim': u'EX V-6', u'name': u'EX V-6 4dr Sedan (3.0L 6cyl 4A)', u'm
ake': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 10000
1215, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Acco
rd', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan
', u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'EX', u'na
me': u'EX 2dr Coupe (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'
honda', u'name': u'Honda'}, u'id': 100002024, u'year': {u'id': 100000126, u'year
': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'
Accord'}, u'submodel': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'nice
Name': u'coupe'}}, {u'trim': u'DX', u'name': u'DX 4dr Sedan (2.3L 4cyl 5M)', u'm
ake': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 10000
1204, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Acco
rd', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan
', u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'DX', u'na
me': u'DX 4dr Sedan (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'
honda', u'name': u'Honda'}, u'id': 100001203, u'year': {u'id': 100000126, u'year
': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'
Accord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Sedan', u'nice
Name': u'sedan'}}, {u'trim': u'DX', u'name': u'DX 4dr Sedan w/Side Airbags (2.3L
4cyl 5M)', u'make': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'
}, u'id': 100001206, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id
': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u
'body': u'Sedan', u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'tri
m': u'DX', u'name': u'DX 4dr Sedan w/Side Airbags (2.3L 4cyl 4A)', u'make': {u'i
d': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 100001205, u'ye
ar': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'nic
eName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'model
Name': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'EX', u'name': u'EX
2dr Coupe w/Leather (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'
honda', u'name': u'Honda'}, u'id': 100001208, u'year': {u'id': 100000126, u'year
': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'
Accord'}, u'submodel': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'nice
Name': u'coupe'}}, {u'trim': u'EX', u'name': u'EX 2dr Coupe (2.3L 4cyl 5M)', u'm
ake': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 10000
1207, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Acco
rd', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Coupe
', u'modelName': u'Accord Coupe', u'niceName': u'coupe'}}, {u'trim': u'LX V-6',
u'name': u'LX V-6 4dr Sedan (3.0L 6cyl 4A)', u'make': {u'id': 200001444, u'niceN
ame': u'honda', u'name': u'Honda'}, u'id': 100001227, u'year': {u'id': 100000126
, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'n
ame': u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Sedan'
, u'niceName': u'sedan'}}, {u'trim': u'Value Package', u'name': u'Value Package
4dr Sedan (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'honda', u'
name': u'Honda'}, u'id': 100001228, u'year': {u'id': 100000126, u'year': 2001},
u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'},
u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Sedan', u'niceName': u's
edan'}}, {u'trim': u'LX', u'name': u'LX 4dr Sedan w/Side Airbags (2.3L 4cyl 5M)'
, u'make': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id':
100001225, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda
_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'
Sedan', u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'LX V
-6', u'name': u'LX V-6 2dr Coupe (3.0L 6cyl 4A)', u'make': {u'id': 200001444, u'
niceName': u'honda', u'name': u'Honda'}, u'id': 100001226, u'year': {u'id': 1000
00126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord'
, u'name': u'Accord'}, u'submodel': {u'body': u'Coupe', u'modelName': u'Accord C
oupe', u'niceName': u'coupe'}}, {u'trim': u'Value Package', u'name': u'Value Pac
kage 4dr Sedan w/Side Airbags (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'nic
eName': u'honda', u'name': u'Honda'}, u'id': 100001229, u'year': {u'id': 1000001
26, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u
'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Seda
n', u'niceName': u'sedan'}}, {u'trim': u'LX', u'name': u'LX 2dr Coupe w/Side Air
bags (2.3L 4cyl 5M)', u'make': {u'id': 200001444, u'niceName': u'honda', u'name'
: u'Honda'}, u'id': 100001219, u'year': {u'id': 100000126, u'year': 2001}, u'mod
el': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'sub
model': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'niceName': u'coupe'
}}, {u'trim': u'LX', u'name': u'LX 4dr Sedan (2.3L 4cyl 4A)', u'make': {u'id': 2
00001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 100001220, u'year':
{u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName
': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName'
: u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'LX', u'name': u'LX 2dr C
oupe (2.3L 4cyl 5M)', u'make': {u'id': 200001444, u'niceName': u'honda', u'name'
: u'Honda'}, u'id': 100001217, u'year': {u'id': 100000126, u'year': 2001}, u'mod
el': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Accord'}, u'sub
model': {u'body': u'Coupe', u'modelName': u'Accord Coupe', u'niceName': u'coupe'
}}, {u'trim': u'LX', u'name': u'LX 2dr Coupe w/Side Airbags (2.3L 4cyl 4A)', u'm
ake': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 10000
1218, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Acco
rd', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Coupe
', u'modelName': u'Accord Coupe', u'niceName': u'coupe'}}, {u'trim': u'LX', u'na
me': u'LX 4dr Sedan w/ABS and Side Airbags (2.3L 4cyl 4A)', u'make': {u'id': 200
001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 100001223, u'year': {u
'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName':
u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName':
u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'LX', u'name': u'LX 4dr Sed
an w/Side Airbags (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName': u'ho
nda', u'name': u'Honda'}, u'id': 100001224, u'year': {u'id': 100000126, u'year':
2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name': u'Ac
cord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Sedan', u'niceNa
me': u'sedan'}}, {u'trim': u'LX', u'name': u'LX 4dr Sedan (2.3L 4cyl 5M)', u'mak
e': {u'id': 200001444, u'niceName': u'honda', u'name': u'Honda'}, u'id': 1000012
21, u'year': {u'id': 100000126, u'year': 2001}, u'model': {u'id': u'Honda_Accord
', u'niceName': u'accord', u'name': u'Accord'}, u'submodel': {u'body': u'Sedan',
u'modelName': u'Accord Sedan', u'niceName': u'sedan'}}, {u'trim': u'LX', u'name
': u'LX 4dr Sedan w/ABS (2.3L 4cyl 4A)', u'make': {u'id': 200001444, u'niceName'
: u'honda', u'name': u'Honda'}, u'id': 100001222, u'year': {u'id': 100000126, u'
year': 2001}, u'model': {u'id': u'Honda_Accord', u'niceName': u'accord', u'name'
: u'Accord'}, u'submodel': {u'body': u'Sedan', u'modelName': u'Accord Sedan', u'
niceName': u'sedan'}}], u'stylesCount': 28}
理想情况下,我希望最终访问一个“styleID”变量,在这种情况下,该变量等于“200001444”。
【问题讨论】:
-
这是我正在审查的一个示例:stackoverflow.com/questions/11339210/…
-
好的,你有示例输入但没有示例输出。给定这个输入,你的目标输出是什么?
-
它们存储在字典中,这意味着它们没有排序。如果您取出找到的第一个,它可能不是 JSON 中的第一个。
-
您所拥有的是 Python 字典的表示形式。它不是 JSON,尽管它很可能是从 JSON 文档构建的。你是怎么得到的?我认为你很有可能在某个地方犯了错误,而明智的答案取决于知道那个错误是什么。
-
API 返回一个 JSON 响应,然后将其转换为上述内容。理想情况下,在这种情况下,输出将是一个包含“200001444”的变量。