2010-11-03 5 views
0
{ 
    "_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" 
} 

L'un des éléments de la liste est ci-dessus.Comment puis-je le sérialiser en JSON?

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

Cependant, je ne peux pas sérialiser en raison du champ date. Il ne peut pas sérialiser le datetime.

+1

pourquoi ne pas convertir le champ de date dans un timestamp unix? –

+1

Dans le code ci-dessus, la date est une chaîne. Ne pouvez-vous pas sérialiser une chaîne? –

+0

Selon ci-dessus, le champ 'date' contient un' String', pas un 'datetime'. Cependant, ce que vous essayez d'accomplir n'est pas très clair. Dans tous les cas, vous devriez pouvoir convertir un 'datetime' en un' String' et sérialiser le dictionnaire. – clarkf

Répondre

6

Je doute que le problème doive faire quoi que ce soit avec datetime: dans votre dictionnaire, il n'y a aucun objet datetime du tout, mais la clé "date" a une valeur de chaîne régulière.

Plus probablement, le problème est qu'il ne peut pas sérialiser la classe ObjectId. Pour surmonter cette limitation, créez une nouvelle classe héritant de JSONEncoder et remplaçant la méthode default.

+0

Voici ce qu'il dit: Type d'exception: TypeError at/ Exception Valeur: datetime.datetime (2010, 10, 29, 23, 48, 22, 108000) n'est pas sérialisable JSON – TIMEX

+0

Cela signifie très probablement que la valeur que vous essayez marshal n'est pas celui que vous avez posté dans votre message original. –

1

À moins que je ne manque quelque chose - c'est le ObjectId qui cause l'erreur (fonctionne pour moi ici sans elle). Vous pouvez envisager de masquer ou de supprimer ce champ s'il n'est pas nécessaire. La date analyse correctement.

1

Cela fonctionne pour moi. J'ai enlevé ObjectId car je n'ai pas la classe avec moi.

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 

Sortie:

{"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"} 

Et si vous obtenez l'erreur suivante, alors vous devez avoir la classe ObjectId:

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