首页 > 解决方案 > 生成基于虚拟 json 的样本

问题描述

我需要创建假 jsons ,Json 结构将由 json 样本提供,稍后转换为方案/类,.

即以下json的示例:

{"email": "robin14@chapman-quinn.com", "username": "ryan", "first_name": "Ryan", "last_name": "Ramirez", "phone_number": "3718444137", "optiona_info": {"address": "Unit 2836 Box 8447\nDPO AA 19978", "nick": "dummy"}}

这是非常简单的 Json,下面的代码会生成假数据:

from faker import Faker
import json



class OptionalInfo():

    def __init__(self):
        fake = Faker()
        self.address = fake.address()
        self.nick= 'dummy' 
    def returnJson(self):
        return dict (address= self.address ,nick= self.nick)

class PersonalInfo():

    def __init__(self):
        fake = Faker()
        self.email = fake.email()
        self.username = fake.first_name()
        self.first_name = fake.first_name()
        self.last_name = fake.last_name()
        self.phone_number = fake.phone_number()
        self.OptionalInfo = OptionalInfo()

    def returnJson(self):
        return {'email': self.email,
            'username': self.first_name.lower(),
            'first_name': self.first_name,
            'last_name': self.last_name,
            'phone_number': self.phone_number,
            'optional_info': self.OptionalInfo
        }

class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if hasattr(obj,'returnJson'):
            return obj.returnJson()
        else:
            return json.JSONEncoder.default(self, obj)



def input_data(x):
    for i in range(0, x):
        personalinfo = PersonalInfo()

        print (json.dumps(personalinfo.returnJson(), cls=ComplexEncoder))


def main():
    no_of_input = 10
    input_data(no_of_input)


main()

我有点怀疑我是否应该以更“pydantic 风格”来解决这个问题并获得类型验证,并且当我阅读它时,它更直观地描述了嵌套元素......对 pydantic 类中的每个变量应用 faker() ,如此处所示。因此,首先需要就该方法提出建议,其次,如果 pydantic 会是更好的选择-我从哪里开始?对于任何示例都将不胜感激。

标签: pythonjsonfakerpydantic

解决方案


推荐阅读