Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用JSON数据中的数据填充类中的对象?_Python_Json - Fatal编程技术网

Python 如何用JSON数据中的数据填充类中的对象?

Python 如何用JSON数据中的数据填充类中的对象?,python,json,Python,Json,我想用从JSON接收的数据填充我的对象 JSON中的数据键与我的类中的参数命名相同 有没有有效的方法来创建填充对象?因此,我的类将有超过50个变量 我的测试课程: class Joint: spineX = 0.0 spineY = 0.0 spineZ = 0.0 Json数据: print(jsonData) #prints -> {"spineX":8.9,"spineY":7.7,"spineZ":9.9} 8.9 7.7 9.9 也许可以在类中添加一

我想用从JSON接收的数据填充我的对象

JSON中的数据键与我的类中的参数命名相同

有没有有效的方法来创建填充对象?因此,我的类将有超过50个变量

我的测试课程:

class Joint:
    spineX = 0.0
    spineY = 0.0
    spineZ = 0.0
Json数据:

print(jsonData) #prints -> {"spineX":8.9,"spineY":7.7,"spineZ":9.9}
8.9
7.7
9.9

也许可以在类中添加一个
\uuuuu init\uuuuu

导入json
类接头:
定义初始值(自、尖晶石、尖晶石、尖晶石):
self.spineX=spineX
self.spineY=spineY
self.spineZ=spineZ
s='{“spineX”:8.9,“spineY”:7.7,“spineZ”:9.9}'
o=json.loads
接头=接头(**o)
打印(vars(接头))

好吧,我将附加这个答案,因为您谈论的是
类属性
,而不是
实例属性
。您可以使用
setattr

这是
getattr()
的对应项。参数是一个
对象
,一个
字符串
和任意值。
字符串可以命名现有的
属性或新属性。该函数将值指定给
属性,只要对象允许。例如,
setattr(x,
“foobar”,123)
相当于
x.foobar=123

您可以这样做:

class Joint:
    spineX = 0.0
    spineY = 0.0
    spineZ = 0.0

s = '{"spineX":8.9,"spineY":7.7,"spineZ":9.9}'
o = json.loads(s)

for k in o.keys():
    setattr(Joint, k, o[k])

print(Joint.spineX)
print(Joint.spineY)
print(Joint.spineZ)
输出:

print(jsonData) #prints -> {"spineX":8.9,"spineY":7.7,"spineZ":9.9}
8.9
7.7
9.9
现在,
Joint
的每个新实例都将具有这些
class属性值。如果您这样做:

x = Joint()
print(x.spineX)
print(x.spineY)
print(x.spineZ)
您还将获得:

8.9
7.7
9.9
更有趣的是,使用
setattr()
甚至可以添加未定义的
类属性。例如:

setattr(Joint, "spineA", 10.0)
print(Joint.spineA)
输出

10.0

非常感谢。非常有用的答案!非常感谢。这个答案包含了我想知道的信息!