Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在应用Django数据库API之前解析json?_Django_Json_Django Models - Fatal编程技术网

是否可以在应用Django数据库API之前解析json?

是否可以在应用Django数据库API之前解析json?,django,json,django-models,Django,Json,Django Models,我有一个Django数据库,其中存储了一些JSON。我希望提取这个JSON,解析它,然后对它应用过滤器/查询。更具体地说,我希望有一个动态网页,显示按用户偏好排序、过滤或分组的JSON 通过阅读Django文档,我只能看到如何使用像starts_with这样的预先制作的过滤器,而不能看到如何预处理数据。我确实看到了应用正则表达式的选项,但我认为我无法手工实现完整的JSON解析器。我目前解析JSON,然后使用python类对其进行搜索,但这似乎违背了使用数据库的目的,特别是因为它所能处理的查询类型

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

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

JSON来自其他源代码,对其字段或结构没有任何保证

提前感谢,


jhoyla

我能想到的最好的答案是动态地将JSON作为表添加到数据库中,以获得两个结果字符串(我这样做是因为字典不能保证保持顺序。)


给出我想要的结果,但是这只在JSON最多1层的情况下有效(虽然我认为这可能会被修复,但它已经相当粗糙了。

我猜JSON在数据库中存储/检索为字符串。因此它没有类似于数据库的查询。您可以应用python支持的任何字符串操作。您可能希望在客户端(即使用javascript在网页内)进行过滤和排序)。这会减少您的负载,您只需要将json放入网页。谢谢,我想知道这是否会更有效,但考虑到当前数据库是本地缓存,我认为不会。您认为在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