2017-08-04 4 views
0

私はAPIからの応答としてJSON文書に基づいて入れ子になったPython辞書を作成するアプリケーションを持っています。例:yaml構成に対してオブジェクトの値を検証します

colleagues = [ 
{ "name": "John", 
    "skills": ["python", "java", "scala"], 
    "job": "developer" 
}, 
{ "name": "George", 
    "skills": ["c", "go", "nodejs"], 
    "job": "developer" 
}] 

この辞書は、さらに多くのネストレベルを持つことができます。 私がしたいのは、YAML設定ファイルでユーザーが自分の任意の条件を定義して(たとえば、スキルの中に「Python」がある、または名前が「John」である同僚を探すためです) Python辞書と照合する。

私は彼らがYAMLファイルに次のようにそれを設定させることを考えたが、これはexec()を使用して必要になり、私はセキュリティ上の理由で避けしたい:

constraints: 
    - "python" in colleagues[x]["skills"] 
    - colleagues[x]["name"] == "John" 

他のどのようなオプションは、そのようなのためにあります問題は、ユーザーが辞書の値のための独自の制約を指定することができるように?ここでも、上記の辞書は単なる例です。実際のサイズとサイズははるかに大きいです。

答えて

1

Luceneクエリパーサーを使用して、"skill:python"および"name:John"などのクエリを実行可能な述語関数に変換し、それらの述語を使用して同僚のリストをフィルタすることができます。 "python lucene parser"のグーグルでは、いくつかの解析オプションが表示されます。

+0

フェッチしたJSONを使ってツリーを作成し、 '' skill:python "'や '' name:John "'のようなクエリを使ってツリーをクエリできますか?私は、手動でツリーを作成するためにオーバーヘッドがないことを確認したいだけです。 –

+0

はい、Pythonの 'json'モジュールを使ってツリーを辞書のリストに変換し、クエリから作成した述語関数を使って必要な辞書だけをフィルタリングします。 – PaulMcG

関連する問題