Home > database >  Pandas DataFrame as body of FastAPI's JSONResponse
Pandas DataFrame as body of FastAPI's JSONResponse

Time:02-25

I have a Pandas DataFrame with several columns and some data that I need to return in a response body from a FastAPI application. Borrowing the DataFrame example from another similar, but different, question:

test_list = [["Joe", 34, "Accounts", 10000], ["Jack", 35, "Chemistry", 20000], ["Jill", 37, "Art", 2000]]
df = pandas.DataFrame(data=test_list, columns=["Name", "Age", "Dept.", "Salary"])

Now if I try to use dataframe.to_json as follows, the returned body is a string with every quote character escaped and is not JSON:

result = df.to_json(orient="records") #creates a json string
return JSONResponse(content = result) 

The above returns something like:

"[{\"Name:\":\"Joe\", \"Age\":\"34\"},  ...etc"

The following works (in that the returned body is valid JSON) but I don't like that the response is returned as plain text instead of JSON. Is there a better, more proper way to do this?

result = df.to_json(orient="records") 
return PlainTextResponse(content = result)

CodePudding user response:

Instead of json, convert it to dict which fastapi should be able to handle automatically:

result = df.to_dict('records')
return JSONResponse(content = result) 
  • Related