0

我有一个 Django 数据库,其中存储了一些 JSON。我希望提取此 JSON,对其进行解析,然后对其应用过滤器/查询。更具体地说,我想要一个动态网页,显示按用户偏好排序、过滤或分组的 JSON。

通过阅读 Django 文档,我只能看到如何使用像starts_with 这样的预制过滤器,而不是如何预处理数据。我确实看到了应用正则表达式的选项,但我认为我不能手动实现完整的 JSON 解析器。我目前解析 JSON,然后使用 python 类搜索它,但这似乎违背了使用数据库的目的,特别是因为它可以处理的查询类型有限。

JSON 来自其他来源,不能保证它的字段或结构。

提前致谢,

乔伊拉

4

1 回答 1

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 层深的情况下才有效(尽管我认为这可以修复,但它已经很老套了。

于 2012-07-04T20:28:53.460 回答