将每个元素的列表转换为类的对象到json

时间:2014-06-09 11:25:37

标签: python json flask

我有一个python列表,其中列表中的每个元素都是类Summershum.Model.File的对象:

message = [
<File(tar_file:appstream-glib-0.1.5.tar.xz, filename:/appstream-glib-0.1.5/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>, 
<File(tar_file:totem-3.12.1.tar.xz, filename:/totem-3.12.1/build-aux/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gvfs-1.20.2.tar.xz, filename:/gvfs-1.20.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gnome-software-3.12.2.tar.xz, filename:/gnome-software-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gnome-packagekit-3.12.2.tar.xz, filename:/gnome-packagekit-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gnome-color-manager-3.12.2.tar.xz, filename:/gnome-color-manager-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gnome-chess-3.12.2.tar.xz, filename:/gnome-chess-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:gnome-power-manager-3.12.2.tar.xz, filename:/gnome-power-manager-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:evolution-mapi-3.12.2.tar.xz, filename:/evolution-mapi-3.12.2/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:cockpit-0.7.tar.bz2, filename:/cockpit-0.7/tools/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:xf86-video-freedreno-1.1.0.tar.bz2, filename:/xf86-video-freedreno-1.1.0/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>, 
<File(tar_file:elfutils-0.159.tar.bz2, filename:/elfutils-0.159/config/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>,
<File(tar_file:ibus-table-1.5.0.20140519.tar.gz, filename:/ibus-table-1.5.0.20140519/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>, 
<File(tar_file:fence-agents-4.0.9.tar.xz, filename:/fence-agents-4.0.9/config.guess, sha256:4a86808b907403ad6801c0661a4524dfa07c0b898a2cef6e7fa0cf82a09b9c53)>
]

我正在尝试将此列表转换为json,并希望将其传递给view进行显示(filename,sha1sum)。

我试图使用&#34; json &#34;转换类对象。方法:     message = [msg。 json (),用于消息中的消息] 但是

print message

没有给我任何空列表。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您提供的dir(message[0])输出,错误很简单 - _ __json__()对象没有summershum.model.File方法。所以我猜你的代码的相关部分是这样的:

try:
    ...
    message = [msg.__json__() for msg in message]
    print message
    ...
except Exception:
    # Some code, or just "pass"

由于没有__json__()方法,您应该获得AttributeError。但是,听起来你没有看到异常,这就是为什么我假设代码周围有try...except块。

由于没有内置方法将文件内容转换为json,因此您必须使用内置的json模块。例如:

>>> import json
>>> jsonString = '{"one":"two"}'
>>> jsonObj = json.loads(jsonString)
>>> jsonObj
{u'one': u'two'}

您需要致电json.loads并向其提供该文件的上下文。我不确定您需要做什么,但根据可用的方法,我建议您了解gettar_file方法给您的内容。

您也可能只是过早地致电__json__() - 您从gettar_file获得的对象可能会{{1} }} 方法。