如何将其序列化为JSON?

时间:2010-11-03 08:37:18

标签: javascript python json datetime serialization

{
    "_id" : ObjectId("4ccb42cb8aad692e01000004"),
    "loc" : {
        "lat" : 37.799506,
        "long" : -122.459445
    },
    "test_set" : 1,
    "title" : "Melissa Mills Housewife 01 SIGNED",
    "num_comments" : 58,
    "down_votes" : 66,
    "up_votes" : 79,
    "image_url" : "http://farm2.static.flickr.com/1374/5126544615_79170591e5_m.jpg",
    "image_url_thumb" : "http://farm2.static.flickr.com/1374/5126544615_79170591e5_t.jpg",
    "date" : "Fri Oct 29 2010 21:55:23 GMT+0000 (UTC)",
    "flickr_id" : "5126544615"
}

该列表中的一个要素就在上面。

thejson = simplejson.dumps({"results":thelist})

但是,由于date字段,我无法将其序列化。它无法序列化日期时间。

3 个答案:

答案 0 :(得分:6)

我怀疑问题是否必须对datetime做任何事情:在你的字典中,根本没有datetime对象,但“date”键有一个常规的字符串值。

更有可能的是,它无法序列化ObjectId类。要克服此限制,请创建一个继承自JSONEncoder的新类,并覆盖default方法。

答案 1 :(得分:1)

除非我遗漏了某些内容 - 导致错误的ObjectId(在没有它的情况下适合我)。如果不需要,您可能需要考虑修改或删除该字段。 日期解析得很好。

答案 2 :(得分:1)

这对我有用。我删除了ObjectId,因为我没有上课。

result = {
    "loc" : {
        "lat" : 37.799506,
        "long" : -122.459445
    },
    "test_set" : 1,
    "title" : "Melissa Mills Housewife 01 SIGNED",
    "num_comments" : 58,
    "down_votes" : 66,
    "up_votes" : 79,
    "image_url" : "http://farm2.static.flickr.com/1374/5126544615_79170591e5_m.jpg",
    "image_url_thumb" : "http://farm2.static.flickr.com/1374/5126544615_79170591e5_t.jpg",
    "date" : "Fri Oct 29 2010 21:55:23 GMT+0000 (UTC)",
    "flickr_id" : "5126544615"
}

import simplejson

thejson = simplejson.dumps(result)

print thejson

输出:

{"down_votes": 66, "loc": {"lat": 37.799506000000001, "long": -122.459445}, "image_url": "http://farm2.static.flickr.com/1374/5126544615_79170591e5_m.jpg", "test_set": 1, "title": "Melissa Mills Housewife 01 SIGNED", "up_votes": 79, "num_comments": 58, "image_url_thumb": "http://farm2.static.flickr.com/1374/5126544615_79170591e5_t.jpg", "date": "Fri Oct 29 2010 21:55:23 GMT+0000 (UTC)", "flickr_id": "5126544615"}

如果您收到以下错误,那么您需要使用ObjectId类:

    "_id" : ObjectId("4ccb42cb8aad692e01000004"),
NameError: name 'ObjectId' is not defined