Как мне сериализовать это в JSON? - PullRequest
0 голосов
/ 03 ноября 2010
{
    "_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 ]

6 голосов
/ 03 ноября 2010

Я сомневаюсь, что проблема связана с datetime: в вашем словаре вообще нет объекта datetime, но ключ date имеет регулярное строковое значение.

Скорее всего, проблема в том, что он не может сериализовать класс ObjectId. Чтобы преодолеть это ограничение, создайте новый класс, наследующий от JSONEncoder и переопределяющий метод default.

1 голос
/ 03 ноября 2010

Это работает для меня.Я удалил 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
1 голос
/ 03 ноября 2010

Если я что-то упустил - это ObjectId, который вызывает ошибку (у меня здесь работает без нее).Вы можете рассмотреть возможность удаления или удаления этого поля, если не нужно.Дата разбирается нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...