Question Details

No question body available.

Tags

python json nested

Answers (2)

Accepted Answer Available
Accepted Answer
March 30, 2025 Score: 0 Rep: 148,941 Quality: High Completeness: 60%

I don't know what exactly you expect in output but if you want every item in new row then you could use normal code with for-loop for this.

orderlist = {
    "return": {
        "statusprocessing": "3",
        "status": "OK",
        "order": {
            "id": "872102042",
            "number": "123831",
            "dateorder": "dd/mm/yyyy",
             "itens": [
                {
                    "item": {
                        "idproduct": "684451795",
                        "code": "VPOR",
                        "description": "Product 1",
                        "unit": "Un",
                        "quantity": "1.00",
                        "value": "31.76"
                    }
                },
                {
                    "item": {
                        "idproduct": "684451091",
                        "code": "VSAP",
                        "description": "Product 2",
                        "unit": "Un",
                        "quantity": "1.00",
                        "value": "31.76"
                    }
                }
            ]
        }
    }
}

import pandas as pd

data = []

order = orderlist['return']['order']

for iten in order['itens']: for key, val in iten.items(): row = { #'key': key, 'id': order['id'], 'dateorder': order['dateorder'], 'number': order['number'], 'idproduct': val['idproduct'], #'code': val['code'], #'description': val['description'], #'quantity': val['quantity'], #'value': val['value'], } data.append(row)

df = pd.DataFrame(data) print(df)

Result:

          id  dateorder  number idproduct
0  872102042  dd/mm/yyyy  123831  684451795
1  872102042  dd/mm/yyyy  123831  684451091

If you need other information in rows then you should show it in question.

March 31, 2025 Score: 1 Rep: 29,144 Quality: Medium Completeness: 60%

You're code is fine. You are getting the data, perhaps you just wanted to specify which columns to keep (or maybe rename)?

import json import pandas as pd

data = ''' { "return": { "statusprocessing": "3", "status": "OK", "order": { "id": "872102042", "number": "123831", "dateorder": "dd/mm/yyyy", "itens": [ { "item": { "idproduct": "684451795", "code": "VPOR", "description": "Product 1", "unit": "Un", "quantity": "1.00", "value": "31.76" } }, { "item": { "idproduct": "684451091", "code": "VSAP", "description": "Product 2", "unit": "Un", "quantity": "1.00", "value": "31.76" } } ] } } }'''

orderlist = json.loads(data)

df = pd.jsonnormalize(orderlist, recordpath= ["return", "order", "itens"], meta=[["return", "order", "id"], ["return", "order", "number"], ["return", "order", "dateorder"]])

df = df[['return.order.id', 'return.order.number', 'return.order.dateorder', 'item.idproduct']]

Output:

print(df) return.order.id return.order.number return.order.date
order item.description 0 872102042 123831 dd/mm/yyyy Product 1 1 872102042 123831 dd/mm/yyyy Product 2