如何使用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) 

我是新来的* - 随时评论我的问题,所以我可以提高自己。

+0

你确定输入的是一个有效的JSON? –

+0

不,我应该改变什么? –

+0

下一次当你不确定一个json是一个有效的json时,使用这个[website](http://jsonlint.com/)来验证它 –

你需要一个领导和你的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']