解析python 3.6上的json对象

问题描述 投票:0回答:2

我需要一些帮助解析python 3.6上的json对象..我不知道如何解析这个jsons

({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1309],9713,\"MATH\",\"\",\"normal\"],[1513599300,[71],[1309],15653,\"ENGLISH\",\"\",\"normal\"],[1513673100,[71],[1309],15728,\"SPORT\",\"\",\"normal\"],[1513679400,[74],[1309],15651,\"BIOLOGY\",\"\",\"normal\"]]}}"})

要么

({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513673100,[71],[1309],15728,\"MATH\",\"\",\"normal\"],[1513679400,[74],[1309],15651,\"SPANISH\",\"\",\"normal\"],[1513683100,[71],[1309],15728,\"ENGLISH\",\"\",\"normal\"],]}}"})

我需要时间,房间,老师和名字在所有课程的单独变量(接下来我将解码它) p.s:我在编程方面经验不足。和json对象的小经验。这是我的第一个问题......

python json
2个回答
0
投票

看起来你有一个元组(),单个元素是一个字典{"d" : "..."},它有一个带有键d的单个元素和一个应该是JSON字符串的值。

如果我删除了dict周围的括号和\"normal\"]之后的逗号,我可以将内容读入这样的字典:

>>> import json
>>> json.loads(s['d'])
{'events': {'values': [[1513673100, [71], [1309], 15728, 'MATH', '', 'normal'], [1513679400, [74], [1309], 15651, 'SPANISH', '', 'normal'], [1513683100, [71], [1309], 15728, 'ENGLISH', '', 'normal']], 'keys': ['time', 'room', 'groups', 'teacher', 'name', 'comment', 'class']}}

现在将结果存储在变量(例如res)中,并使用dict索引来访问单个值

>>> res['events']['keys'][0]
'time'

>>> res['events']['values'][0][0]
1513673100

0
投票

对于这两个示例,您可以执行以下操作:

from ast import literal_eval as le

a = ({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1309],9713,\"MATH\",\"\",\"normal\"],[1513599300,[71],[1309],15653,\"ENGLISH\",\"\",\"normal\"],[1513673100,[71],[1309],15728,\"SPORT\",\"\",\"normal\"],[1513679400,[74],[1309],15651,\"BIOLOGY\",\"\",\"normal\"]]}}"})

b = ({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513673100,[71],[1309],15728,\"MATH\",\"\",\"normal\"],[1513679400,[74],[1309],15651,\"SPANISH\",\"\",\"normal\"],[1513683100,[71],[1309],15728,\"ENGLISH\",\"\",\"normal\"],]}}"})


result1 = {k: le(v) for k, v in a.items()}
print(result1)
result2 = {k: le(v) for k, v in b.items()}
print(result2)

输出:

{'d': {'events': {'keys': ['time', 'room', 'groups', 'teacher', 'name', 'comment', 'class'], 'values': [[1513593000, [71], [1309], 9713, 'MATH', '', 'normal'], [1513599300, [71], [1309], 15653, 'ENGLISH', '', 'normal'], [1513673100, [71], [1309], 15728, 'SPORT', '', 'normal'], [1513679400, [74], [1309], 15651, 'BIOLOGY', '', 'normal']]}}}

{'d': {'events': {'keys': ['time', 'room', 'groups', 'teacher', 'name', 'comment', 'class'], 'values': [[1513673100, [71], [1309], 15728, 'MATH', '', 'normal'], [1513679400, [74], [1309], 15651, 'SPANISH', '', 'normal'], [1513683100, [71], [1309], 15728, 'ENGLISH', '', 'normal']]}}}

然后,您可以从结果中访问您想要的任何值,这是有效的Python字典。

© www.soinside.com 2019 - 2024. All rights reserved.