accessing json data in python and fast api

Viewed 32
test_data = {
        "transactions": [{
                "id": 5494,
                "specific_wallet_id": 2079,
                "evaluation_process_transaction_id": 5229,
                "transaction_type": "Earn",
                "points": 9,
                "created_at": "2022-09-20T16:14:19.000+05:30",
                "updated_at": "2022-09-20T16:14:19.000+05:30",
                "custom_wallet_transaction_id": "null",
                "order_meta_data": {},
                "points_validity": "2023-09-20T00:00:00.000+05:30",
                "points_status": "Active",
                "transaction_amount": 450.0,
                "transaction_at": "2022-09-20T16:14:18.000+05:30",
                "tnx_status": "Successful",
                "current_points": 9,
                "programme_id": 4,
                "customer_id": 1,
                "reason_code": "Earn",
                "channel": "app",
                "order_id": "1",
                "transaction_references": "null",
                "points_value": 9.0,
                "issuer": {
                    "id": 1,
                    "name": "oo",
                    "code": "oo",
                    "image_url": "null"
                },
                "partner": null
                
            },
            {
                "id": 5486,
                "specific_wallet_id": 2079,
                "evaluation_process_transaction_id": 5221,
                "transaction_type": "Earn",
                "points": 9,
                "created_at": "2022-09-20T15:46:15.000+05:30",
                "updated_at": "2022-09-20T15:46:15.000+05:30",
                "custom_wallet_transaction_id": "null",
                "order_meta_data": {},
                "points_validity": "2023-09-20T00:00:00.000+05:30",
                "points_status": "Active",
                "transaction_amount": 450.0,
                "transaction_at": "2022-09-20T15:46:14.000+05:30",
                "tnx_status": "Successful",
                "current_points": 9,
                "programme_id": 4,
                "customer_id": 2189,
                "reason_code": "Earn",
                "channel": "app",
                "order_id": "uuu",
                "transaction_references": "null",
                "points_value": 9.0,
                "issuer": {
                    "id": 1,
                    "name": "oo",
                    "code": "ooo",
                    "image_url": "null"
                },
                "partner": {
                    "id": 1,
                    "name": "qq",
                    "code": "qq",
                    "image_url": "https://d157777v0iph40..net///offers/avis.jpg"
                }
            }
        ],
        "success": "true",
        "error": "null"
    }

results=[]
results.extend(
    [

        AllTransaction(
            issuer_id=Config.evaluation_issuer_id,
            issuer_name="",
            issuer_logo="",
            wallet_id=o["specific_wallet_id"],
            partner=o["partner"],
            points=o["points"],
            points_value_in_currency=(
                o["points"] * 1
            ),
            transaction_at=o["transaction_at"],
            transaction_id=o["id"],
            transaction_type=o["transaction_type"],
            transaction_meta={
                "order_id": o["order_id"],
                "channel": o["channel"],
                "order_meta_data": o["order_meta_data"],
            },
            transaction_name=o["transaction_type"],
        )
        for o in test_data["transactions"]
    ]
)
return TransactionResponse(results=results)

model code

   class TransactionDetailsPartner(BaseModel):
            partner: Optional[dict] =None
class TransactionDetails(BaseModel):
    points: int
    points_value_in_currency: float
    transaction_id: int
    transaction_at: datetime
    transaction_type: str
    transaction_meta: Optional[dict]
    transaction_name: Optional[TransactionType]
class TransactionDetailsIssuer(BaseModel):
    issuer_id: int
    issuer_name: str
    issuer_logo: str
    wallet_id: int
class AllTransaction(TransactionDetails, TransactionDetailsIssuer, TransactionDetailsPartner):
    pass

**this is my main method and here my partnerdata is null in one entry at test_data and in pydantic model i made as optional but still it throwing error if i pass null data how to resolve this **

how to access this partner key even it is null and at model or api level is ok. thanks in advance

1 Answers

The code that you gave is not valid Python, null is a valid JSON value but in Python it has to be None.

Try to load the string as JSON and then parse it to a Pydantic model.

Related