我们希望针对列表表单中的任何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的新手 - 随意评论我的问题,以便我可以提高自己。
答案 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"
}
}]