在 Python 中,无法从标准输出中检索"dictionary inside a list"



我正在执行一个curl命令,输出是这样的json格式,我将其重定向到输出文件

[{"createdDateTime":"2015-03-24T12:06:45.403+000","Id":"123","ToDo":"VIEW"},{"createdDateTime":"2015-03-25T06:30:31.624+000","Id":"456","ToDo":"VIEW"}]

我正在尝试以下代码来访问此数据中的Id信息。我以为这是一本清单里的字典。但python以不同的方式处理它。请提供您的意见。

import subprocess
import shlex
cmd="curl -X GET 'xxx'"
shlex.split(cmd)
p1=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
stdout, stderr = p1.communicate()
print stdout
jsonFile = open('jsonFile.txt', 'w')
jsonFile.writelines(str(stdout))
jsonFile.close()
jsonFile = open('jsonFile.txt', 'r')
jsonout = [jsonFile.readlines()]
Ids = [d['Id'] for d in jsonout]
print Ids

输出:

[['[{"createdDateTime":"2015-03-24T12:06:45.403+000","Id":"123","ToDo":"VIEW"},{"createdDateTime":"2015-03-25T06:30:31.624+000","Id":"456","ToDo":"VIEW"}]]]追踪(最近一次通话):文件"File.py",第16行,位于Ids=[d['Id']表示发音中的dTypeError:列表索引必须是整数,而不是str

Python有一个全面的json模块来处理这样的任务。

import json
with open ('jsonFile.txt', 'r') as f:
    jsonout = json.load(f)

您的问题是没有使用json解析器库。试试这个:

import json
jsonout=json.loads(open('jsonFile.txt', 'r').read())
Ids = [d['Id'] for d in jsonout]
print Ids

对我来说,它打印[u'123', u'456']

哦,我应该补充一点,与我不同的是,你也应该考虑关闭文件。

最新更新