将嵌套的json展平为多行

时间:2018-11-13 18:11:03

标签: python json

我正在处理一个高度嵌套的json文件,该文件包含多个词典和列表。一些键是相似的,我想知道是否可以将每个词典放在不同的行中。没关系,如果某些列不相同,则值可以留为空白。

Json文件(与原始文件相似)

{
  "ID": "01",
  "session": [
    {
      "A": [
        "abc",
        "cde",
        "efj"
      ],
      "B": 14,
      "C": 14,
      "D": [
        {
          "F": {
            "a": "ldjf",
            "b": "kdj",
            "ID": "01",
            "c": "kjasgfk",
            "d": [
              "pw"
            ],
            "e": "dsg"
          }
        },
        {
          "F": {
            "a": "ldjewiorf",
            "ID": "01",
            "c": "kjasnbgfk",
            "d": "mbxzc" ,             
            "e": "dsg"
          }
        },
        {
          "F": {
            "f": "1232",
            "g": "rege",
            "h": "en-gb",
            "i": "dfkj34",
            "j": "iyt658"
          }
        }
      ],
      "properties": {
        "AA":"esg",
        "BB": "skdjghk",
        "CC": "adfkh",
        "DD": "sdlkfh"
      }
    },
    {
      "A": [
       "abc",
        "cde",
        "efj"
      ],
      "B": 16,
      "C": 14,
      "D": [
        {
          "F": {
            "a": "sdg",
            "b": "sg",
            "ID": "01",
            "c": "sg",
            "d": "shfh",
            "e": "weitu"
          }
        },
        {
          "F": {
            "f": "1232",
            "m": "sdg",
            "n": "en-sdg",
            "o": "eqe",
            "p": "sdg"
          }
        }
      ],
      "properties": {
        "AA":"ekjhsg",
        "BB": "skkldjghk",
        "CC": "adfyurkh",
        "DD": "sdlkfmlh"
      }
    }
  ],
  "G": {
    "A1": {
      "year": 2016,
      "month": 5,
      "dayOfMonth": 1,
      "hourOfDay": 0,
      "minute": 0,
      "second": 0
    },
    "A2": "ksjdf",
    "A3": "s38764",
    "A4": [
      {
        "year": 2016,
        "month": 5,
        "dayOfMonth": 1,
        "hourOfDay": 0,
        "minute": 0,
        "second": 0
      }
    ]
  }
}

我尝试了这段代码,但是将整个文件放在多列的1行中:

def flatten_json(y):
    out = {}

    def flatten(x, name=''):
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + '_')
        elif type(x) is list:
            i = 0
            for a in x:
                flatten(a, name + str(i) + '_')
                i += 1
        else:
             out[name[:-1]] = x

    flatten(y)
    return out

我要解决的问题是否存在解决方案?

0 个答案:

没有答案