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

我可以将Json反序列化为Python中的C#Newtonsoft类吗,python,json,class,serialization,json.net,Python,Json,Class,Serialization,Json.net,这是json {"name":"david","age":14,"gender":"male"} 这是python类 class Person: def __init__(self): self.name = None self.age = None self.gener = None self.language = None 这是密码 #deserialize func~~~~~ print person.name #

这是json

{"name":"david","age":14,"gender":"male"}
这是python类

class Person:
    def __init__(self):
        self.name = None
        self.age = None
        self.gener = None
        self.language = None
这是密码

#deserialize func~~~~~
print person.name #prints david
print person.age #prints 14
print person.gender #prints male
print person.language #prints "None"
我可以将Json反序列化为Python中的类吗(比如C#Newtonsoft)


谢谢。

您可以将它与
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
不过,只是一张便条。当您尝试使用
打印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

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

例如:

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)

已经解决了:我想要匹配所有json项的可能重复项,如person。这个json{“name”:“david”,“age”:14,“gender”:“male”}@ambitiousdh如果你不想让None值进行字典理解并删除所有None属性,即
{k:v代表k,v在self中。如果v}
不,我想进行映射,即使它不在json项中。