2010-09-20 25 views

Répondre

1

Vous pouvez vérifier les pilotes MongoDB pour ces langues, puisque MongoDB utilise BSON. Voyez ce qu'ils utilisent, ou volez leur implémentation.

0

L'encodeur/décodeur BSON en Java est assez trivial. L'extrait de code suivant provient de mon application, il est donc dans Scala. Je suis sûr que vous pourriez facilement créer une implémentation Java.

import org.bson.BSON 
import com.mongodb.{DBObject, DBDecoder, DefaultDBDecoder} 

def convert(dbo: DBObject): Array[Byte] = 
    BSON.encode(dbo) 

// NB! this is a stateful object and thus it's not thread-safe, so have 
// to create one per decoding 
def decoder: DBDecoder = DefaultDBDecoder.FACTORY.create 

def convert(data: Array[Byte]): DBObject = 
    // NOTE: we do not support Ref in input, that's why "null" for DBCollection 
    decoder.decode(data, null) 

def convert(is: InputStream): DBObject = 
    // NOTE: we do not support Ref in input, that's why "null" for DBCollection 
    decoder.decode(is, null) 

La seule note importante est que DBEncoder instance possède un état interne (re) utilise lors du décodage, il est donc thread-safe. Cela devrait être correct si vous décodez les objets un par un, mais sinon vous feriez mieux de créer une instance par session de décodage.

0

Et voici un 11 C++ JSON codeur et décodeur que j'ai fait en utilisant Rapidjson, parce que l'encodeur JSON natif (BSONObj::jsonString) utilise un codage non standard pour les longs: https://gist.github.com/ArtemGr/2c44cb451dc6a0cb46af

En outre, contrairement au codeur JSON natif, celui-ci n'a aucun problème pour décoder les tableaux de niveau supérieur.