سؤال

لدي تطبيق Java الذي يأخذ البيانات من التطبيق الخارجي. Jsons الواردة في الأوتار. أود تحليل هذه الأوتار وإنشاء كائنات BSON.

من المؤسف أنني لا أستطيع العثور على API لذلك في تطبيق Java's BSON.

هل يمكنني استخدام محلل خارجي لذلك مثل GSON؟

هل كانت مفيدة؟

المحلول

يبدو أن أسهل طريقة هي استخدام مكتبة JSON لتحليل سلاسل JSON في أ Map ثم استخدم putAll طريقة لوضع هذه القيم في BSONObject.

هذا الجواب يوضح كيفية الاستخدام جاكسون لتحليل سلسلة JSON في Map.

نصائح أخرى

يأتي سائق MongoDB 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.0.0 ، يمكنك:

import org.bson.Document;

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

المستندات الرسمية:

لتحويل سلسلة 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();

يستخدم Document.parse(String json) من org.bson.Document. يعود Document كائن هو نوع من Bson.

كنت قد تكون مهتمة في BSON4Jackson Project ، الذي يتيح لك استخدام Data Data Binding للعمل مع BSON (إنشاء Pojos من BSON ، الكتابة باسم BSON) - خاصة وأن جاكسون يعمل أيضًا مع JSON. لذلك سوف يسمح بتحويل كما ذكرت ، فقط استخدم instanstaces ObjectMapper (واحد يعمل مع JSON ، والآخر مع BSON).

مع Jackson ، يمكنك إما العمل مع Pojos الكامل (بنية إعلان تريدها) أو بخرائط وقوائم بسيطة وما إلى ذلك. تحتاج فقط إلى إعلان ما الذي يجب اكتبه لربطه عند قراءة البيانات (عند الكتابة ، يتم تعريف النوع بواسطة الكائن الذي تمريره).

ستجد إجابة سؤالك في الكود المصدري لـ https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cppالذي لديه BSON إلى JSON تحويل.

في الأساس ، مثل أشياء مثل

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

وهلم جرا...

أود أن أقترح استخدام أساليب Tojson () و Parse (سلسلة) من BasicDboBject ، لأن فئة الأداة المساعدة JSON قد تم ضبطها.

import com.mongodb.BasicDBObject;

public static BasicDBObject makeBsonObject(String json) {
    return BasicDBObject.parse(json);
}

public static String makeJsonObject(BasicDBObject dbObj) {
    return dbObj.toJson();
}

لست متأكدًا من Java ولكن برنامج تشغيل Mongodb CPP لديه نوع وظيفة

bsonobj fromjson (سلسلة)

الذي يعيد bsonobj وفقا للسلسلة التي تم تمريرها. يجب أن يكون هناك نفس الوظيفة في جافا أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top