我们可以像Jackson中的Object mapper一样将json响应Map到python对象吗?

igsr9ssn  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(71)

我是python的新手,试图将json响应Map到python对象,就像我们在Java中使用Jackson库一样,这样我们就可以使用Java对象。
sample json:-

{
    "name":"John",
    "age": 31,
    "city": "New York"
}

字符串
类来Map这些参数

class PersonDetails:
    name: str
    age: int
    city: str

    def __init__(self, name: str, age: int, city: str) -> None:
        self.name = name
        self.age = age
        self.city = city
        
     def get_age(self):
        return self.age
        
     def set_age(self, age):
        self.age = age
        
     def get_name(self):
        return self.name
        
     def set_name(self, name):
        self.name = name

     def get_city(self):
        return self.city
        
     def set_city(self, city):
        self.city = city


并想用这个personDetails类Mapjson。
下面的代码是用来解析json的,我在jsonConverted变量中获取值,但是我想使用PersonDetails类,这样我就可以用getter和setter获取值,就像我们在Java中使用Jackson库一样。

responseData= json.dumps(response.json())
jsonConverted= json.loads(responseData, object_hook=lambda d: SimpleNamespace(**d))
print(jsonConverted.name, jsonConverted.age, jsonConverted.city)


能做到吗?

piv4azn7

piv4azn71#

下面的代码执行对象Map。

import requests
import json

class CreateObject:
    def __init__(self, d=None):
        if d is not None:
            for key, value in d.items():
                setattr(self, key, value)
   
def deserialize_response2(api_url):
    response = requests.get(api_url)
    data = json.loads(response.text)   
    responseObject = CreateObject(data)
    users = [CreateObject(field) for field in responseObject.data]
    responseObject.data = users
    return responseObject

result_object = deserialize_response2("https://reqres.in/api/users?page=2")
print(result_object.data[0].email)

字符串
还有另一种使用Marshmallow框架的方法。如果你想试试看我的博客文章https://xeon2k.wordpress.com/2023/12/26/marshmallow-a-python-orm/

相关问题