我可以将Json反序列化为Python中的C#Newtonsoft类吗
这是json我可以将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 #
{"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项中。