Comment lire JSON de prise en python? (Incremental parser JSON)

J'ai un socket ouvert et j'aimerais lire quelques données json. Le problème est que le json module de la bibliothèque standard ne peut analyser à partir des chaînes de caractères (load ne lit que l'ensemble du dossier et des appels loads à l'intérieur) Il vérifie que tout le chemin à l'intérieur du module tout dépend du paramètre de chaîne.

C'est un réel problème avec les sockets puisque vous ne pourrez jamais lire tout cela à la chaîne et vous ne savez pas comment le nombre d'octets à lire avant de l'analyser.

Donc mes questions sont: Est-il un (simple et élégant) solution de contournement? Est-il une autre librairie json qui peut analyser les données de manière incrémentielle? Est-ce la peine de l'écrire moi-même?

Edit: C'est XBMC jsonrpc api. Il n'y a aucun message d'enveloppes, et je n'ai aucun contrôle sur le format. Chaque message peut être sur une seule ligne ou sur plusieurs lignes.
Je pourrais écrire un simple analyseur qui a besoin seulement getc fonction d'une certaine forme, et de le nourrir à l'aide de s.recv(1), mais ce n'est pas un très pythonic solution et je suis un peu paresseux pour le faire 🙂

Cette prise de flux comprennent des enveloppes? La plupart des protocoles de prise vous donner une idée de la taille du contenu à venir vers le bas le flux. Êtes-vous essayer de vous connecter à un bien connu json socket protocole? Avez-vous le contrôle de la prise de protocole? La façon la plus simple est de connaître la taille de chaque message (comme HTTP a Contenu des en-têtes de Longueur). Sinon, vous devrez analyser les données comme il s'agit de savoir quand elle commence et quand elle se termine et que la bibliothèque standard ne peut pas vous aider.

OriginalL'auteur cube | 2011-09-07