相关疑难解决方法(0)

如何使类JSON可序列化

如何使Python类可序列化?

一个简单的课程:

class FileItem:
    def __init__(self, fname):
        self.fname = fname
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能得到输出:

>>> import json

>>> my_file = FileItem('/foo/bar')
>>> json.dumps(my_file)
TypeError: Object of type 'FileItem' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

没有错误(__CODE__)

python serialization json

730
推荐指数
19
解决办法
61万
查看次数

将类实例序列化为JSON

我正在尝试创建类实例的JSON字符串表示并且有困难.假设这个类是这样构建的:

class testclass:
    value1 = "a"
    value2 = "b"
Run Code Online (Sandbox Code Playgroud)

对json.dumps的调用是这样的:

t = testclass()
json.dumps(t)
Run Code Online (Sandbox Code Playgroud)

它失败并且告诉我测试类不是JSON可序列化的.

TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用pickle模块:

t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))
Run Code Online (Sandbox Code Playgroud)

它提供类实例信息,但不提供类实例的序列化内容.

b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python serialization json pickle

160
推荐指数
10
解决办法
25万
查看次数

迭代python中的对象属性

我有一个python对象,有几个属性和方法.我想迭代对象属性.

class my_python_obj(object):
    attr1='a'
    attr2='b'
    attr3='c'

    def method1(self, etc, etc):
        #Statements
Run Code Online (Sandbox Code Playgroud)

我想生成一个包含所有对象属性及其当前值的字典,但我想以动态的方式进行(所以如果以后我添加另一个属性,我也不必记得更新我的函数).

在PHP中,变量可以用作键,但是python中的对象是不可编写的,如果我使用点符号,它会创建一个名为my var的新属性,这不是我的意图.

只是为了让事情更清楚:

def to_dict(self):
    '''this is what I already have'''
    d={}
    d["attr1"]= self.attr1
    d["attr2"]= self.attr2
    d["attr3"]= self.attr3
    return d
Run Code Online (Sandbox Code Playgroud)

·

def to_dict(self):
    '''this is what I want to do'''
    d={}
    for v in my_python_obj.attributes:
        d[v] = self.v
    return d
Run Code Online (Sandbox Code Playgroud)

更新:使用属性我只是指这个对象的变量,而不是方法.

python oop iteration attributes

137
推荐指数
3
解决办法
13万
查看次数

将动态python对象转换为json

可能重复:
Python可序列化对象json

我需要知道如何将动态python对象转换为JSON.该对象必须能够具有多个对象子对象.例如:

class C(): pass
class D(): pass

c = C()
c.dynProperty1 = "something"
c.dynProperty2 = { 1, 3, 5, 7, 9 }
c.d = D()
c.d.dynProperty3 = "d.something"

# ... convert c to json ...
Run Code Online (Sandbox Code Playgroud)

使用python 2.6以下代码:

import json

class C(): pass
class D(): pass

c = C()
c.what = "now?"
c.now = "what?"
c.d = D()
c.d.what = "d.what"

json.dumps(c.__dict__)
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

TypeError: <__main__.D instance at 0x99237ec> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我不知道用户可能会放入哪些类型的子对象c.是否存在足够智能的解决方案来检测属性是否为对象并__dict__自动解析?

更新以包括子对象 …

python json

62
推荐指数
3
解决办法
9万
查看次数

在JSON中编码嵌套的python对象

我想用JSON编码对象.但是,我无法弄清楚如何在没有字符串转义的情况下进行输出.

import json

class Abc:
    def __init__(self):
        self.name="abc name"
    def toJSON(self):
        return json.dumps(self.__dict__, cls=ComplexEncoder)

class Doc:
    def __init__(self):
        self.abc=Abc()
    def toJSON(self):
        return json.dumps(self.__dict__, cls=ComplexEncoder)

class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Abc) or isinstance(obj, Doc):
            return obj.toJSON()
        else:
            return json.JSONEncoder.default(self, obj)

doc=Doc()
print doc.toJSON()
Run Code Online (Sandbox Code Playgroud)

结果是(转储返回一个字符串表示,这就是"被转义"的原因)

{"abc": "{\"name\": \"abc name\"}"}
Run Code Online (Sandbox Code Playgroud)

我想要一些不同的东西.预期的结果是

{"abc": {"name": "abc name"}"}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何...任何提示?

提前致谢.

python json encode

34
推荐指数
4
解决办法
4万
查看次数

simplejson.dumps(dict)抛出"not JSON serializable"

我有一个Python字典,其中键是字符串,值是MyObject对象的列表.如果我执行

simplejson.dumps(dict)
Run Code Online (Sandbox Code Playgroud)

它抛出"MyObject not JSON serializable".

如何避免此异常,如何使MyObject可序列化?

python json dictionary simplejson serializable

3
推荐指数
1
解决办法
8638
查看次数

如何在python中json序列化对象

python是否支持随机json序列化?我收到此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "commands.py", line 36, in toJson
    return json.dumps(self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <commands.SampleCommand object at 0x105d957d0> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

片段:

class SampleCommand(Command):
    def __init__(self,message=None):
        super(Command, self).__init__()
        pass

    def parse(self): …
Run Code Online (Sandbox Code Playgroud)

python json

2
推荐指数
1
解决办法
4243
查看次数