Я пытаюсь создать фиктивные данные и вернуть их в формате json через API с пакетом Python faker, но не уверен, как правильно преобразовать объект faker в формат json. Вот функция, используемая для генерации фиктивных данных:
import json
from flask import Flask, request
from json import dumps, loads, JSONEncoder
from faker import Faker
from faker.providers import person
import random
fake = Faker()
fake.add_provider(person)
### ensure the name and gender matched
def first_name_and_gender():
g = 'M' if random.randint(0,1) == 0 else 'F'
n = fake.first_name_male() if g=='M' else fake.first_name_female()
return {'gender':g,'first_name':n}
d = dict()
d['first_name_and_gender'] = first_name_and_gender
d['last_name'] = lambda: {'last_name':fake.last_name()}
def returnMockdata(numRows):
dict_new=dict()
dict_new["User"]={}
key=[]
json_str={}
### loop to generate <numrows> mock data
for _ in range(numRows):
value_list = [d[k]().values() for k in d.keys()]
if len(key) == 0:
key_list = [d[k]().keys() for k in d.keys()]
key=[item for sublist in key_list for item in sublist] ## iterate and put keys into a list
value=[item for sublist in value_list for item in sublist] ## iterate and put values into a list
value_new = zip(key,value) ## combine key and value
dict_new["User"].update( dict( (name,value) for name,value in value_new)) ## append the dict
json_str=json.dumps(dict_new) ## convert dict to json object
print(json_str) ## output in the console window
return json_str
Вот программа вызова API:
from flask import Flask, request
from f_mockdata2 import *
app = Flask(__name__)
@app.route('/api/mockdata/<int:number>')
def returnMock(number):
return returnMockdata(number)
При отправке следующего запроса: http://localhost: 5000 / api / mockdata / 5
json_str будет выводиться в консоли следующим образом:
{"User": {"gender": "F", "first_name": "Andrea", "last_name": "Gibson"}}
{"User": {"gender": "M", "first_name": "Anthony", "last_name": "Neal"}}
{"User": {"gender": "F", "first_name": "Elizabeth", "last_name": "Sandoval"}}
{"User": {"gender": "M", "first_name": "Jonathan", "last_name": "Brown"}}
{"User": {"gender": "F", "first_name": "Cheryl", "last_name": "Mcpherson"}}
Но только последняя запись будет возвращена в окне браузера.
{"User": {"gender": "F", "first_name": "Cheryl", "last_name": "Mcpherson"}}
Я понимаю, что вывод json_str не был допустимым Джейсоном, и должен быть какой-то неправильный или другой лучший вариант для вывода вывода в формате json. Мы будем очень признательны за любые мысли.
Большое спасибо! Stanley