我可以在 Python 中将 Json 反序列化为 C# Newtonsoft 之类的类吗

her*_*ero 4 python serialization json class json.net

这是 json

{"name":"david","age":14,"gender":"male"}
Run Code Online (Sandbox Code Playgroud)

这是python类

class Person:
    def __init__(self):
        self.name = None
        self.age = None
        self.gener = None
        self.language = None
Run Code Online (Sandbox Code Playgroud)

这是代码

#deserialize func~~~~~
print person.name #prints david
print person.age #prints 14
print person.gender #prints male
print person.language #prints "None"
Run Code Online (Sandbox Code Playgroud)

我可以将 Json 反序列化为 Python 中的类吗(如 C# Newtonsoft)

谢谢你。

Der*_*rek 5

您可以将它与json.loads()方法一起使用。您还需要确保您的 JSON 是一个字符串,而不仅仅是内联声明。

这是一个示例程序:

import json

js = '{"name":"david","age":14,"gender":"male"}'

class Person:
    def __init__(self, json_def):
        self.__dict__ = json.loads(json_def)

person = Person(js)

print person.name
print person.age
print person.gender
Run Code Online (Sandbox Code Playgroud)

不过,只是一个注释。当您尝试使用时,print person.language您会遇到错误,因为它在类中不存在。

编辑

如果需要直接映射,则需要对每个可能的对象进行显式映射。

如果每个属性存在于 JSON 对象中,以下示例将为每个属性提供一个值,并且还解决了使用任何缺失属性的愿望:

import json

js = '{"name":"david","age":14,"gender":"male"}'

class Person(object):
    def __init__(self, json_def):
        s = json.loads(json_def)
        self.name = None if 'name' not in s else s['name']
        self.age = None if 'age' not in s else s['age']
        self.gender = None if 'gender' not in s else s['gender']
        self.language = None if 'language' not in s else s['language']

person = Person(js)

print person.name
print person.age
print person.gender
print person.language
Run Code Online (Sandbox Code Playgroud)


Ida*_*lom 5

当我们加载 json 时,您可以使用 **kwargs 之类的方法,我们将得到一个字典,然后我们可以使用 **json_def 初始化我们的对象并获取我们的对象。对于更复杂的 json 反序列化,您必须检查字典并仅获取您需要的值。

例子:

class Person:
    def __init__(self, name=None, age=None, gender=None, language=None):
        self.name = name
        self.age = age
        self.gender = gender
        self.language = language


js = '{"name": "david", "age": 14, "gender": "male"}'
person = Person(**json.loads(js))
print(person.name)
js = '{"name": "david", "age": 14, "gender": "male", "language": "English"}'
person = Person(**json.loads(js))
print(person.language)
Run Code Online (Sandbox Code Playgroud)