如何在2维中扁平化JSON,只能在1维中扁平化

时间:2019-11-12 08:25:01

标签: python json flatten

我们试图将json二维化,但是我们只能使用以下函数将flat扁平化,该函数返回二维json,但是我们想要一个json数组,您可以将其做成一个多行(2维)

import json
from itertools import chain, starmap

def flatten_json(dictionary):
    def unpack(parent_key, parent_value, sep="_"):
        if isinstance(parent_value, dict):
            for key, value in parent_value.items():
                temp1 = parent_key + sep + key
                yield temp1, value
        elif isinstance(parent_value, list):
            i = 0
            for value in parent_value:
                temp2 = parent_key + sep + str(i)
                i += 1
                yield temp2, value
        else:
            yield parent_key, parent_value
    while True:
        dictionary = dict(chain.from_iterable(starmap(unpack, dictionary.items())))
        if not any(isinstance(value, dict) for value in dictionary.values()) and \
                not any(isinstance(value, list) for value in dictionary.values()):
            break
    return dictionary

j=json.loads('{"id":{"oid":"XXXXX"},"class":"YYYYY","version":"1","array": [{"key1" :  "value1"}, {"key2" :  "value2"}, {"key3" :  "value3"}, {"key4" :  "value4"}],"name":"GVASDAD","code":"V","level":6,"value":"0"}')


print(flatten_json(j))

Out[11]: 
{'id_oid': 'XXXXX',
 'class': 'YYYYY',
 'version': '1',
 'array_0_key1': 'value1',
 'array_1_key2': 'value2',
 'array_2_key3': 'value3',
 'array_3_key4': 'value4',
 'name': 'GVASDAD',
 'code': 'V',
 'level': 6,
 'value': '0'}

我想通过以下方式获取json数组:

[{'id_oid': 'XXXXX',
'class': 'YYYYY',
'version': '1',
'array': 'value1',
'name': 'GVASDAD',
'code': 'V',
'level': 6,
'value': '0'},
{'id_oid': 'XXXXX',
'class': 'YYYYY',
'version': '1',
'array': 'value2',
'name': 'GVASDAD',
'code': 'V',
'level': 6,
'value': '0'},
{'id_oid': 'XXXXX',
'class': 'YYYYY',
'version': '1',
'array': 'value3',
'name': 'GVASDAD',
'code': 'V',
'level': 6,
'value': '0'},
{'id_oid': 'XXXXX',
'class': 'YYYYY',
'version': '1',
'array': 'value4',
'name': 'GVASDAD',
'code': 'V',
'level': 6,
'value': '0'}]

任何建议都会有所帮助,

在此先感谢大家!

0 个答案:

没有答案