Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取字符串中ID对象的第一个匹配项_Python_Api - Fatal编程技术网

Python 获取字符串中ID对象的第一个匹配项

Python 获取字符串中ID对象的第一个匹配项,python,api,Python,Api,我正在使用Python API包装器获取汽车模型的JSON响应。根据搜索的汽车,我可以得到0到50个“ID”结果。如何从我的字符串中提取第一个出现的ID,而忽略所有其他ID API包装器(来自GitHub): # Make API Call .... .... # extract JSON try: response_json = r.json() print response_json 我做了一些搜索,但我看到的大多数解决方案都相当复杂。拆

我正在使用Python API包装器获取汽车模型的JSON响应。根据搜索的汽车,我可以得到0到50个“ID”结果。如何从我的字符串中提取第一个出现的ID,而忽略所有其他ID

API包装器(来自GitHub):

# Make API Call
   ....
   ....
# extract JSON
    try:
        response_json = r.json()
        print response_json
我做了一些搜索,但我看到的大多数解决方案都相当复杂。拆分字符串,遍历,将其转换回打印语句。如果愿意的话,有没有更简单的方法来搜索我的字符串(“id”)

我的字符串(响应\u 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'

字符串中有多个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']

使用JSON库将字符串加载到变量中,然后直接引用字段:

import json
data = json.loads(my_string)
data['styles'][0]['id']
如果数据已经在结构中(如上所示),则


应该给您第一个id。

您得到的不是字符串,而是库方法返回的字典

下面是
response\u 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
键的值:

>>> response_json['styles'][0]['id']
100001210
。。。或者,如您所建议的,如果您想要Make ID:

>>> response_json['styles'][0]['make']['id']
200001444

下面是我正在回顾的一个示例:好的,您有示例输入,但没有示例输出。给定此输入,您的目标输出是什么?它们存储在字典中,这意味着它们没有排序。如果你拿出你找到的第一个,它可能不是JSON中的第一个,你得到的是Python字典的表示。它不是JSON,尽管它很可能是由JSON文档构建的。你怎么知道的?我认为你很有可能在某个地方犯了错误,一个合理的答案取决于你是否知道这个错误是什么。理想情况下,在本例中,输出将是一个保存“200001444”的变量。我有以下内容:'json_response=api.make_call(endpoint)styleID=ast.literal_eval(json_response.replace('\n','')['styles'][0]['make']['id']print styleID'和get dict object没有属性replace输入是否已经是上面试图创建的字典?如果是这样,编辑可能会有所帮助。呜呜!response_json['styles'][0]['id']为我提供了所需的信息。谢谢!:)虽然答案的第二部分是正确的,但第一部分是错误的:即使OP认为他们有一个字符串是正确的,所描述的字符串不是JSON,并且
JSON.loads()
会导致
ValueError
。正确,但该技术仍然有效。如果收到真实的JSON字符串,JSON.loads()将加载它。他展示的字符串是一个dict的输出,这让我意识到它已经被加载了。
>>> response_json['styles'][0]['make']['id']
200001444