Конвертировать python тип диктатора фейера в json объект - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать фиктивные данные и вернуть их в формате 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

...