首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取字符串中ID对象的第一次出现

获取字符串中ID对象的第一次出现
EN

Stack Overflow用户
提问于 2015-05-14 04:27:50
回答 3查看 1.6K关注 0票数 3

我使用Python包装器来获得car模型的JSON响应。根据搜查的车,我可以得到0到50 'ID‘的结果。如何从我的字符串中提取ID的第一次出现而忽略所有其他字符串?

API包装器(来自GitHub):

代码语言:javascript
复制
# Make API Call
   ....
   ....
# extract JSON
    try:
        response_json = r.json()
        print response_json

我做了一些搜索,但我看到的大多数解决方案都是相当复杂的。拆分字符串,迭代,将其转换回打印语句。如果你愿意的话,去search_mystring('id')有什么更简单的方法吗?

My (response_json):

代码语言:javascript
复制
{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}

理想情况下,我希望访问最终等于“200001444”的“styleID”变量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-14 04:59:20

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

代码语言:javascript
复制
import json
data = json.loads(my_string)
data['styles'][0]['id']

如果数据已经在结构中(如上面所示),则

代码语言:javascript
复制
response_json['styles'][0]['id']

应该给你第一个身份证。

票数 4
EN

Stack Overflow用户

发布于 2015-05-14 05:08:09

您得到的不是字符串,而是请求库的response.json()方法返回的字典。

下面是response_json的实际样子:

代码语言:javascript
复制
{
    '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键的值:

代码语言:javascript
复制
>>> response_json['styles'][0]['id']
100001210

..。或者,正如您建议的那样,如果您想要Make:

代码语言:javascript
复制
>>> response_json['styles'][0]['make']['id']
200001444
票数 7
EN

Stack Overflow用户

发布于 2015-05-14 04:55:55

字符串中有多个ID,但假设您想要第一个car make的ID:

代码语言:javascript
复制
import ast
# s is the string in the question literally
print ast.literal_eval(s.replace('\n', ''))['styles'][0]['make']['id']

输出:

代码语言:javascript
复制
200001444

编辑:如果输入已经是dict,那么您可以尝试:

代码语言:javascript
复制
s['styles'][0]['make']['id']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30229221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档