Index: library/mongodb/nsfmongo.c =================================================================== diff -u -r4ca97cad5be85ed8ed29ec29189812215dbe5693 -re3e8f375df1313380cd13a6cb97028569f99d729 --- library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision 4ca97cad5be85ed8ed29ec29189812215dbe5693) +++ library/mongodb/nsfmongo.c (.../nsfmongo.c) (revision e3e8f375df1313380cd13a6cb97028569f99d729) @@ -513,12 +513,12 @@ * Define the api functions ***********************************************************************/ /* -cmd json NsfMongoJson { +cmd json::generate NsfMongoJsonGenerate { {-argName "list" -required 1 -type tclobj} } */ static int -NsfMongoJson(Tcl_Interp *interp, Tcl_Obj *listObj) { +NsfMongoJsonGenerate(Tcl_Interp *interp, Tcl_Obj *listObj) { bson_t list, *listPtr = &list; size_t length; char *jsonString; @@ -545,7 +545,31 @@ return result; } +/* +cmd json::parse NsfMongoJsonParse { + {-argName "json" -required 1 -type tclobj} +} +*/ +static int +NsfMongoJsonParse(Tcl_Interp *interp, Tcl_Obj *jsonObj) { + bson_t bson, *bsonPtr = &bson; + const char *jsonString; + int result, jsonLength; + bson_error_t bsonError; + jsonString = Tcl_GetStringFromObj(jsonObj, &jsonLength); + + if (bson_init_from_json (bsonPtr, jsonString,jsonLength, &bsonError) == true) { + Tcl_SetObjResult(interp, BsonToList(interp, bsonPtr, 0)); + bson_destroy( bsonPtr ); + result = TCL_OK; + } else { + result = NsfPrintError(interp, "mongo::json::parse: error: %s", bsonError.message); + } + + return result; +} + /* cmd close NsfMongoClose { {-argName "conn" -required 1 -type mongoc_client_t -withObj 1}