代码之家  ›  专栏  ›  技术社区  ›  Maciek Sawicki

从JSON字符串创建BSON对象

  •  39
  • Maciek Sawicki  · 技术社区  · 14 年前

    我有从外部应用程序获取数据的Java应用程序。传入的JSON是字符串。我想解析这些字符串并创建bson对象。

    不幸的是,我在Java的BSON实现中找不到API。

    我有没有像GSON那样使用外部解析器?

    9 回复  |  直到 6 年前
        1
  •  11
  •   Community CDub    7 年前

    最简单的方法似乎是使用JSON库将JSON字符串解析为 Map 然后使用 putAll 方法将这些值放入 BSONObject .

    This answer 显示如何使用 Jackson 将JSON字符串解析为 地图 .

        2
  •  38
  •   james.garriss Pavel    7 年前

    官方MangoDB Java驱动程序附带了用于解析JSON到BSON并将BSON序列化为JSON的实用方法。

    import com.mongodb.DBObject;
    import com.mongodb.util.JSON;
    
    DBObject dbObj = ... ;
    String json = JSON.serialize( dbObj );
    DBObject bson = ( DBObject ) JSON.parse( json );
    

    司机可以在这里找到: https://mongodb.github.io/mongo-java-driver/

        3
  •  36
  •   yair    9 年前

    …而且,从3.0.0开始,您可以:

    import org.bson.Document;
    
    final Document doc = new Document("myKey", "myValue");
    final String jsonString = doc.toJson();
    final Document doc = Document.parse(jsonString);
    

    官方文件:

        4
  •  9
  •   james.garriss Pavel    7 年前

    要将字符串json转换为bson,请执行以下操作:

    import org.bson.BasicBSONEncoder;
    import org.bson.BSONObject;
    
    BSONObject bson = (BSONObject)com.mongodb.util.JSON.parse(string_json);
    BasicBSONEncoder encoder = new BasicBSONEncoder();
    byte[] bson_byte = encoder.encode(bson);
    

    要将BSON转换为JSON,请执行以下操作:

    import org.bson.BasicBSONDecoder;
    import org.bson.BSONObject;
    
    BasicBSONDecoder decoder = new BasicBSONDecoder();
    BSONObject bsonObject = decoder.readObject(out);
    String json_string = bsonObject.toString();
    
        5
  •  3
  •   StaxMan    14 年前

    你可能对 bson4jackson Project,它允许您使用Jackson数据绑定来使用BSON(从BSON创建POJO,作为BSON编写)——特别是因为Jackson也使用JSON。因此,它将允许您提到的转换,只需使用不同的Objectmapper实例(一个与JSON一起工作,另一个与BSON一起工作)。

    对于Jackson,您可以使用完整的pojos(您想要的声明结构),也可以使用简单的映射、列表等。You just need to declare what to type to bind to when reading data (when writing, type is defined by object you pass).

        6
  •  2
  •   Kresten Krab Thorup    12 年前

    您可以在源代码中找到问题的答案。 https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp 它具有从bson到json的转换。

    基本上,像

    • ObjectId("XXX") -gt; { "$oid" : "XXX" }
    • /XXX/gi -gt; { "$regex" : "XXX", "$options" : "gi" }

    等等…

        7
  •  1
  •   mayank_gupta    13 年前

    我不确定Java,但是MangGDB CPP驱动程序有一个函数类型。

    bsonobj fromjson(字符串)

    它根据传递的字符串返回bsonobj。在Java中也应该有同样的功能。

        8
  •  1
  •   Brandon Minnick    6 年前

    我建议使用basicdbobject的tojson()和parse(string)方法,因为json实用程序类已经@deprecated。

    import com.mongodb.BasicDBObject;
    
    public static BasicDBObject makeBsonObject(String json) {
        return BasicDBObject.parse(json);
    }
    
    public static String makeJsonObject(BasicDBObject dbObj) {
        return dbObj.toJson();
    }
    
        9
  •  0
  •   Lakindu Akash    6 年前

    使用 Document.parse(String json) org.bson.Document . 它返回 Document 对象类型为 Bson .