如何使用python从文件中过滤json输出?

时间:2017-02-10 10:05:38

标签: python json

我们希望针对列表表单中的任何testers.txt过滤userid的以下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的新手 - 随意评论我的问题,以便我可以提高自己。

3 个答案:

答案 0 :(得分:2)

您的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

答案 1 :(得分:0)

使用this website验证json时,您将知道json是无效的。

你需要添加一个[]来将json放在jsons列表中,因为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']

答案 2 :(得分:-1)

使用jq可以轻松实现你想要的。

# jq '.[] | .user | .user_id' testers.txt

"16214222"
"44223333"

假设您使用以下格式的 json:

[{
    "status": true,
    "user": {
        "user_id": "16214222",
        "username": "tester11"
    }
},
{
    "status": true,
    "user": {
        "user_id": "44223333",
        "username": "tester22"
    }
}]