2016-09-30 22 views
-3

親キーを組み合わせて各値の一意の名前を生成するRESTサービスから返された、次のJSONがあります。例えば。 name+phone+address+city+name,name+phone+address+city+population+skilled+maleなど。各JSON値に一意の名前を生成する方法

{ 
    "name": "name", 
    "phone": "343444444", 
    "address": { 
    "lat": 23.444, 
    "lng": 34.3322, 
    "city":{ 
     "name": "city name", 
     "population": { 
     "skilled": { 
      "male": 2, 
      "female": 4 
     }, 
     "uneducated": { 
      "male": 20, 
      "femail": 4 
     } 
     } 
    } 
    }, 
    "email": "email", 
    "education": "phd" 
} 

JSONツリーの親から始まるすべてのキー名を結合したいと思います。ここで

は、私はこのコードは、キーを印刷するだけで、現在の親ノードから開始される

class TestJson 
    def walk_through(self, json_object): 
     for k, v in json_object.items(): 
      self.x_path = self.x_path + k 
      if type(v) is dict: 
       self.walk_through(v) 
      else: 
       print(self.x_path) 
       self.x_path = "" 

をやっているものです。私はすべてのキーをjsonのルートまで結合したい。

+0

キーの順序は必ずしも同じであるとは限りません。 –

+0

@gre_gorは注文を同じに保つ方法がありますか? – amjad

答えて

1

あなたはnamephoneキーを無視した場合、彼らはcity nameまたはskilled maleの祖先との順序ではありませんので、キーは保証されていません、あなたは再帰的に平坦なdictを構築することができます。

def walk_through(json_object): 
    d = {} 
    for k, v in json_object.items(): 
     if isinstance(v, dict): 
      v = walk_through(v) 
      for vk, vv in v.items(): 
       d["%s+%s" % (k, vk)] = vv 
     else: 
      d[k] = v 
    return d 

print(json.dumps(walk_through(json_object), indent=2)) 

この版画:

{ 
    "address+city+population+skilled+male": 2, 
    "name": "name", 
    "address+lng": 34.3322, 
    "address+city+name": "city name", 
    "address+lat": 23.444, 
    "address+city+population+uneducated+male": 20, 
    "phone": "343444444", 
    "address+city+population+uneducated+femail": 4, 
    "education": "phd", 
    "email": "email", 
    "address+city+population+skilled+female": 4 
} 

注:が、これはその中のdictsを見つけることができませんリストを無視します。

0

あなたは次の操作を行うことができますPythonの辞書のすべてのキーを印刷する場合:

def print_keys(d): 
    for key, value in d.iteritems(): 
     print key, 
     if isinstance(value, dict): 
      print_keys(value) 
関連する問題