2016-04-07 3 views
1

jsonファイル内の特定のjsonオブジェクトのすべての出現箇所を、それらのキーの1つを使用して見つけることができるようにします。私は次のようなJSONブロックしている場合たとえば:深くネストされたjsonファイル内のすべてのキーの出現を検索するにはどうすればよいですか?

{ 
        "FNMIP": 1, 
        "FNMIT": 0, 
        "FNMP": { 
        "DP": { 
         "DT": 0, 
         "UF": true, 
         "DF": "yyyyMMdd" 
        }, 
        "FP": { 
         "FE": null 
        } 
        }, 
        "IE": true, 
        "$": "PMF" 
       } 

を、私はこのキーを含むすべてのJSONのブロックを検索し、別のJSONオブジェクトでそれを置き換えるためにいくつかの種類のロジックを適用したいです。私はPythonの新機能として、Pythonでこのようなことをする方法については理解できません。

+0

、あなたはDFSの検索をしたい、とあなたが一致するものを見つけたときに、そのオブジェクトを追加します。代わりに"$"キーはあなたがin演算子を使用することができ、データに存在するかどうかをテストするために

アレイ?あなたは再帰的にそれを歩く必要があります – Fallenreaper

+0

私は深さの最初の検索を行うアイデアを得る、私はDFSを行うと私はそのオブジェクトを見つけるときに新しいオブジェクトを置き換え、より多くのオブジェクトを探すために検索を続行するそのタイプ。 – AnkitSablok

+0

サンプルデータと修正を提供できますか? [dict'オブジェクト型に関するドキュメント](https://docs.python.org/2/library/stdtypes.html#mapping-types-dict) –

答えて

1

私が正しく理解していれば、再帰的にネストされたdictを歩きたいし、特定の値に一致する値は何か他のものに置き換えてください。これを行うには:

def recursive_replace(data,match,repl): 
    for k,v in data.items(): 
     if v == match: 
      data[k] = repl #replace the matched value 
     elif isinstance(v,dict): 
      recursive_replace(v,match,repl) 

次に、データをjsonに戻すことができます。だから、

def recursive_replace(data,repl): 
    for k,v in data.items(): 
     if not isinstance(v,dict): 
      continue 
     elif "$" in v: 
      data[k] = repl 
     else: 
      recursive_replace(v,repl) 
+0

を調べるとよいでしょう"$": "PMF"の場合は上記のようなjsonオブジェクトの場合、それを新しいオブジェクトに置き換えます。 – AnkitSablok

+0

_新しいオブジェクトで置き換え_何のように?それは静的な価値か、物事の壮大な体系にデータがどこに位置するかに基づいて決定されますか? "$"キーを1つ上のレベルのキーに置き換えるために、{"tadhg":{"$": "A"}、 "Ankit":{"$": "B"}}構造の中に?新しいデータは '{" tadhg ":{" tadhg ":" A "}、" Ankit ":{" Ankit ":" B "}}' –

+0

のようになりますので、 "$" : "A"とすると、 "$"がキーである辞書である親オブジェクトを新しい辞書に置き換えたいので、{"X": "S"、 "V":{"$ ":PFM}}のように、{" P ":" A "}に置き換えます。 – AnkitSablok

関連する問題