我想制作一个程序,让可汗学院的数学问题离线复制。我有一个巨大的21.6MB文本文件,其中包含所有练习的数据,但我不知道如何开始分析它,更不用说开始从中提取问题。如何开始拉开JSON数据块?
Here是一个包含JSON数据样本的pastebin。如果你想看到它,你可以找到它here。长时间加载的警告。
我从来没有使用JSON,但我写了一个快速的Python脚本来尝试加载单个“子块”(或等效的正确术语)的数据。
import sys
import json
exercises = open("exercises.txt", "r+b")
byte = 0
frontbracket = 0
backbracket = 0
while byte < 1000: #while byte < character we want to read up to
#keep at 1000 for testing purposes
char = exercises.read(1)
sys.stdout.write(char)
#Here we decide what to do based on what char we have
if str(char) == "{":
frontbracket = byte
while True:
char = exercises.read(1)
if str(char)=="}":
backbracket=byte
break
exercises.seek(frontbracket)
block = exercises.read(backbracket-frontbracket)
print "Block is " + str(backbracket-frontbracket) + " bytes long"
jsonblock = json.loads(block)
sys.stdout.write(block)
print jsonblock["translated_display_name"]
print "\nENDBLOCK\n"
byte = byte + 1
您没有考虑嵌套括号......您可以使用堆栈来跟踪它。 – danielfranca
您可以使用[jsonlint](http://jsonlint.com/)之类的内容来复制/粘贴部分JSON,以便至少以可读格式获取它。我想我已经在那里找到了重复的模式,但是你知道你实际需要的数据吗?一旦你把它加载到'json'中,那么你就可以开始将它作为嵌套列表和字典来处理。 – roganjosh
这似乎是你的重复模式:http://pastebin.com/4nSnLEFZ – roganjosh