0

私はDjangoデータベースを持っており、そこにはJSONが保存されています。この JSON を抽出して解析し、フィルターやクエリを適用したいと考えています。より具体的には、JSON をユーザー設定で並べ替え、フィルター処理、またはグループ化して表示する動的 Web ページが必要です。

Django のドキュメントを読むと、starts_with などの事前に作成されたフィルターを使用する方法しかわかりませんが、データを前処理する方法はわかりません。正規表現を適用するオプションを見ましたが、完全な JSON パーサーを手動で実装できるとは思いません。現在、JSON を解析し、Python クラスを使用して検索していますが、データベースを使用する目的に反しているようです。特に、処理できるクエリの種類が限られているためです。

JSON は他のソースからのものであり、そのフィールドまたは構造について保証されていません。

前もって感謝します、

ジョイラ

4

1 に答える 1

0

私が思いついた最良の答えは、JSON をテーブルとしてオンザフライでデータベースに追加して、結果の 2 つの文字列を取得することです (辞書は順序を維持することが保証されていないため、私はこのようにしています)。

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 に答える