我有一个非常字符串作为函数的输出,如下所示:
tmp = <"last seen":1568,"reviews [{"id":15869,"author":"abnbvg","changes":........>
我如何从中获取"id":15869
?
答案 0 :(得分:0)
字符串内容看起来像JSON,因此要么使用json模块,要么使用正则表达式来提取所需的特定字符串。
答案 1 :(得分:0)
数据看起来像JSON字符串。使用:
try:
import json
except ImportError:
import simplejson as json
tmp = '"last seen":1568,"reviews":[{"id":15869,"author":"abnbvg"}]'
data = json.loads('{{{}}}'.format(tmp))
>>> print data
{u'reviews': [{u'id': 15869, u'author': u'abnbvg'}], u'last seen': 1568}
>>> print data['reviews'][0]['id']
15869
请注意,我将字符串包裹在{
和}
中以制作字典。如果实际的JSON字符串已经用大括号封装,则可能不必这样做。
答案 2 :(得分:0)
如果id
是字符串中唯一需要的东西,它总是类似于{"id":15869,"author":"abnbvg"...
,那么你可以使用sinple string split而不是json转换。
tmp = '"last seen":1568,"reviews" : [{"id":15869,"author":"abnbvg","changes":........'
tmp1 = tmp.split('"id":', 1)[1]
id = tmp1.split(",", 1)[0]
请注意,tmp1
行可能会引发IndexError,以防在字符串中找不到"id"
项。您可以使用-1代替1来执行辅助步骤。但通过这种方式,您可以报告找不到"id"
。
try:
tmp1 = tmp.split('"id":', 1)[1]
id = tmp1.split(",", 1)[0]
except IndexError:
print "id key is not present in the json"
id = None
如果确实需要json字符串中的更多变量,请使用mhawke将json转换为字典并获取值的解决方案。您可以使用ast.literal_eval
from ast import literal_eval
tmp = '"last seen":1568,"reviews" : [{"id":15869,"author":"abnbvg","changes":........'
tmp_dict = literal_eval("""{%s}"""%(tmp))
print tmp_dict["reviews"][0]["id"]
在第二种情况下,如果您需要收集列表中的所有"id"
键,这将有所帮助:
id_list =[]
for id_dict in tmp_dict["reviews"]:
id_list.append(id_dict["id"])
print id_list