La sortie json de manage.py dumpdata de django n'était pas bonne car le japonais était échappé et les noms de champ étaient dans le désordre dans le modèle, j'ai donc utilisé interactif à la place. (Le nom du modèle est différent du nom réel par exemple)
>>> import json
>>> from collections import OrderedDict
>>> from django.core.serializers.json import DjangoJSONEncoder
>>> from account.models import User
>>> users = list(User.objects.all().order_by('id'))
>>> field_names = ["name", "birthday", "description"]
>>> a = [OrderedDict([("pk", user.pk), ("model", "account.user"), ("fields", OrderedDict([(name, getattr(user, name)) for name in field_names]))]) for user in users]
>>> print json.dumps(a, cls=DjangoJSONEncoder, indent=2)
Le point est
--Json.dump de OrderedDict garde l'ordre --cls = DjangoJSONEncoder est requis pour afficher datetime
Autour.
Le nom du champ doit être extrait des attributs du modèle, afin qu'il puisse être plus généralisé.
(Une addition)
Le japonais s'échappe
Après tout, ce problème est résolu ad hoc en collant la sortie une fois dans le shell de Python 3.
Recommended Posts