I have a nested JSON
{
"ID": 300,
"Name": " TEST",
"Value": [
{
"Details": [
{
"Name": "TEST1",
"Value": "XXXXXX"
},
{
"Name": "TEST2",
"Value": "DDDDDDDD"
}
],
"Time": [ 1600358400, 1600358700, 1600359000],
"Values": [ 0, 0, 0]
}
]
}
I want to flatten the json to be able to get a list like
I used itertools groupby but unable to acheived the desired results. It is flattening horizontally.
Code I have tried so far
from itertools import groupby
import json
def myflatten(d, depth=0):
rv = [({}, depth)]
if isinstance(d, dict):
for k, v in d.items():
if not isinstance(v, dict) and not isinstance(v, list):
for i in rv:
i[0][k] = v
else:
for (vv, _depth) in myflatten(v,depth+1):
rv.append((rv[-1][0].copy(), _depth))
for kkk, vvv in vv.items():
rv[-1][0][kkk] = vvv
elif isinstance(d, list):
for v in d:
rv.append((rv[-1][0].copy(), depth+1))
for (vv, _) in myflatten(v,depth+1):
for kkk, vvv in vv.items():
rv[-1][0][kkk] = vvv
for i, _depth in rv:
yield i, _depth
out = []
a = {
"ID": 300,
"Name": " TEST",
"Value": [
{
"Details": [
{
"Name": "TEST1",
"Value": "XXXXXX"
},
{
"Name": "TEST2",
"Value": "DDDDDDDD"
}
],
"Time": [ 1600358400, 1600358700, 1600359000],
"Values": [ 0, 0, 0]
}
]
}
for v, g in groupby(sorted(myflatten(a), key=lambda k: -k[1]), lambda k: k[1]):
out.extend(i[0] for i in g)
break
print(out)
Can someone help to flatten the nested json/dict/list vertically rather than horizontally? The final objective is to be able to store the data in a RDBMS without having to undefinitely increase number of columns but rather rows.