我有一个Django数据库,其中存储了一些JSON。我想提取这个JSON,解析它,然后对它应用过滤器/查询。更具体地说,我希望有一个动态网页,显示按用户偏好排序,过滤或分组的JSON。
通过阅读Django文档,我只能看到如何使用像starts_with这样的预制过滤器,而不是如何预处理数据。我确实看到了应用正则表达式的选项,但我认为我不能手动实现完整的JSON解析器。我目前解析JSON,然后使用python类搜索它,但这似乎打败了使用数据库的目的,特别是因为它可以处理的查询类型有限。
JSON来自其他一些来源,并且不保证它的字段或结构。
提前致谢,
jhoyla
答案 0 :(得分:0)
我能够提出的最佳答案是将JSON作为表格动态添加到数据库中以获得两个结果字符串(我这样做是因为字典不能保证维护顺序。)
TABLECONFIG = 'data_result'
def jsontodb(conn, jsonarray):
inits = reduce(lambda x, y: x.union(y.keys()), jsonarray, set())
conn.execute("CREATE TABLE " + TABLECONFIG + " (" +
str(map(lambda x: x.encode('UTF-8'), inits)).encode('UTF-8').strip('[]') + ");")
for i in jsonarray:
d = map(lambda y: str(map(lambda x: x.encode('UTF-8'), y)).strip('[]'), zip(*i.items()))
conn.execute("INSERT INTO " + TABLECONFIG + " (" + d[0] + ") VALUES (" + d[1] + ");")
conn.commit()
DBCONFIG = '/work/django.sqlite3'
def pullquery(query):
p = loads(oqr.main(
[str(x) for x in shlex.split(query.encode('UTF-8'))]
))
conn = sqlite3.connect(DBCONFIG)
jsontodb(conn, p)
return conn
给出我想要的结果,但这只有在JSON最多1层深时才有效(尽管我想这可以修复它已经非常hacky了。