如何使用python过滤json输出文件?
问题描述:
我们希望下面的JSON输出testers.txt
以列表形式筛选任何userid
的:如何使用python过滤json输出文件?
{
"status": true,
"user": {
"user_id": "16214222",
"username": "tester11"
}
},
{
"status": true,
"user": {
"user_id": "44223333",
"username": "tester22"
}
}
我们目前有(试过旧代码):
import json
with open('testers.txt') as fp:
inText = fp.read()
data = json.loads(inText)
print data['user_id']
最后输出应该是:
16214222,
44223333
目前,我们得到以下错误:
Traceback (most recent call last):
File "start.py", line 5, in <module>
data = json.loads(inText)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 367, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 7 column 2 - line 14 column 2 (char 105 - 212)
我是新来的stackoverflow - 随时评论我的问题,所以我可以提高自己。
答
你需要一个领导和你的json
文件后括号,就像这样:
[{
"status": true,
"user": {
"user_id": "16214222",
"username": "tester11"
}
},
{
"status": true,
"user": {
"user_id": "44223333",
"username": "tester22"
}
}]
然后你就可以做到以下几点:
import json
with open('testers.txt') as fp:
data = json.load(fp)
for user in data:
print user['user']['user_id']
返回:
16214222
44223333
答
当使用this website验证json时,您将会知道json是无效的。
您需要在jsons的列表中添加[],使JSON作为你JSON是不是一个有效的。
inText = '''
[{
"status": true,
"user": {
"user_id": "16214222",
"username": "tester11"
}
},
{
"status": true,
"user": {
"user_id": "44223333",
"username": "tester22"
}
}]
'''
import json
with open('testers.txt') as fp:
inText = fp.read()
data = json.loads(inText)
print [d['user']['user_id'] for d in data]
输出:
[u'16214222', u'44223333']
你确定输入的是一个有效的JSON? –
不,我应该改变什么? –
下一次当你不确定一个json是一个有效的json时,使用这个[website](http://jsonlint.com/)来验证它 –