본문 바로가기

Computer Science/Python

[Python] nested json(dict) 플랫화(flatten)

반응형

nested json을 처리하다 보면 오브젝트로 처리하기 보다 스트링으로 처리하는게 편한 경우가 있습니다.

그럴 때 플랫화 해서 사용하면 좋습니다.

 

저는 주로 spark에서 구조가 복잡한 json의 leaf들의 통계를 구할 때 많이 사용합니다.

 

원본:

{
    "a": {
        "b": {
            "c": 1
        },
        "d": 0
    }
}

 

플랫화 결과:

{
    "a.b.c": 1,
    "a.d": 0
}

 

플랫화 함수 코드:

def flatten_json(y):
    out = {}
  
    def flatten(x, name =''):
        # If the Nested key-value 
        # pair is of dict type
        deli = '.'
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + deli)
                  
        # If the Nested key-value
        # pair is of list type
        elif type(x) is list:
            i = 0
            for a in x:                
                flatten(a, name + str(i) + deli)
                i += 1
        else:
            out[name[:-1]] = x
  
    flatten(y)
    return out

 

반응형