我使用Python API Wrapper来获取汽车模型的JSON响应。根据搜索到的汽车,我可以得到0到50岁的ID'结果。如何从我的字符串中提取第一个ID而忽略所有其他ID?
API Wrapper(来自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'在这种情况下。
答案 0 :(得分:7)
您所拥有的不是字符串,而是Requests库的response.json()
方法返回的字典。
以下是response_json
的实际情况:
{
'styles': [
{
'id': 100001210,
'make': { 'id': 200001444, 'name': 'Honda', 'niceName': 'honda'},
'model': { 'id': 'Honda_Accord', 'name': 'Accord', 'niceName': 'accord'},
'name': 'EX 4dr Sedan (2.3L 4cyl 4A)',
'submodel': { 'body': 'Sedan', 'modelName': 'Accord Sedan', 'niceName': 'sedan'},
'trim': 'EX',
'year': {'id': 100000126, 'year': 2001}},
{
'id': 100001209,
'make': {'id': 200001444, 'name': 'Honda', 'niceName': 'honda'},
'model': {'id': 'Honda_Accord',
'name': 'Accord',
'niceName': 'accord'},
'name': 'EX 2dr Coupe w/Leather (2.3L 4cyl 5M)',
'submodel': {'body': 'Coupe', 'modelName': 'Accord Coupe', 'niceName': 'coupe'},
'trim': 'EX',
'year': {'id': 100000126, 'year': 2001}
},
# ...
],
'stylesCount': 28
}
...所以,您实际需要的只是附加到id
键的列表中第一个字典的styles
键的值:
>>> response_json['styles'][0]['id']
100001210
...或者,如果您按照建议,您需要Make ID:
>>> response_json['styles'][0]['make']['id']
200001444
答案 1 :(得分:3)
使用JSON库将字符串加载到变量中,然后直接引用字段:
import json
data = json.loads(my_string)
data['styles'][0]['id']
如果数据已经在结构中(如上所示),那么
response_json['styles'][0]['id']
应该给你第一个id。
答案 2 :(得分:0)
字符串中有多个ID,但假设您想要第一辆汽车的ID:
import ast
# s is the string in the question literally
print ast.literal_eval(s.replace('\n', ''))['styles'][0]['make']['id']
输出:
200001444
编辑:如果输入已经是dict,那么你可以尝试:
s['styles'][0]['make']['id']