2010-06-25 16 views
36

से बीएसओएन ऑब्जेक्ट बनाना मेरे पास जावा ऐप है जो बाहरी ऐप से डेटा लेता है। आने वाले जेएसओएन स्ट्रिंग्स में हैं। मैं स्ट्रिंग्स को पार्स करना और बीएसओएन ऑब्जेक्ट्स बनाना चाहता हूं।JSON स्ट्रिंग

दुर्भाग्यपूर्ण मैं जावा के बीएसओएन कार्यान्वयन में इसके लिए एपीआई नहीं ढूंढ सकता।

क्या मैंने जीएसओएन की तरह बाहरी पार्सर का उपयोग किया है?

+0

जवाब के लिए आप हांक धन्यवाद। मैं जैकसन का उपयोग करूंगा क्योंकि, मुझे लगता है कि जीएसओएन वस्तु से मानचित्र को क्रेट नहीं कर सकता है। –

+0

मुझे ऐसा करने का कोई तरीका नहीं मिला, भले ही उनके 'जेसनऑब्जेक्ट' आपको '' सेट करने का तरीका प्रदान करें; मुझे आश्चर्य है कि उन्होंने उस विशेष निर्णय क्यों किए। –

उत्तर

11

JSON स्ट्रिंग को Map में पार्स करने के लिए JSON लाइब्रेरी का उपयोग करने का सबसे आसान तरीका प्रतीत होता है और फिर उन मानों को BSONObject में रखने के लिए putAll विधि का उपयोग करें।

This answer एक JSON स्ट्रिंग को Map में पार्स करने के लिए Jackson का उपयोग करने का तरीका दिखाता है।

3

आपको bson4jackson प्रोजेक्ट में रुचि हो सकती है, जो आपको बीएसओएन के साथ काम करने के लिए जैक्सन डेटा बाइंडिंग का उपयोग करने की अनुमति देता है (बीएसओएन से पीओजेओ बनाएं, बीएसओएन के रूप में लिखें) - खासकर जब जैक्सन जेएसओएन के साथ भी काम करता है। तो यह आपके जैसे रूपांतरण की अनुमति देगा, बस विभिन्न ऑब्जेक्टमैपर इंस्टेंसस्टेस का उपयोग करें (जो JSON के साथ काम करता है, अन्य बीएसओएन के साथ काम करता है)।

जैक्सन के साथ आप या तो पूर्ण POJO (इच्छित संरचना घोषित करें) या सरल मानचित्र, सूचियों आदि के साथ काम कर सकते हैं। आपको केवल डेटा को पढ़ने के दौरान बाध्य करने के लिए टाइप करने की आवश्यकता है (लिखते समय, टाइप आपके द्वारा पारित वस्तु द्वारा परिभाषित किया जाता है)।

1

मैं जावा बारे में निश्चित नहीं हूँ, लेकिन MongoDB सीपीपी चालक एक समारोह प्रकार

BSONObj fromjson (स्ट्रिंग)

जो स्ट्रिंग पारित कर दिया के अनुसार एक BSONObj देता है। जावा में भी एक ही कार्य होना चाहिए।

2

आपको https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp के स्रोत कोड में आपके प्रश्न का उत्तर मिलेगा जिसमें JSON रूपांतरण के लिए बीएसओएन है।

असल में, सामान की तरह

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

और इतने पर ...

36

सरकारी MongoDB जावा ड्राइवर के लिए उपयोगिता के तरीकों के साथ आता है जेएसओएन को बीएसओएन को पार्स करना और जेएसओएन को बीएसओएन को क्रमबद्ध करना।

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/

+0

क्या सी # में इसके लिए कोई वैकल्पिक उपलब्ध है? –

+0

@ सनी यह सवाल जावा के बारे में है और मुझे सी # के बारे में पता नहीं है, मोंगो सी # ड्राइवर स्रोत में देखें, – eskatos

+0

से ऊपर की तरह उपयोगिता विधियां होनी चाहिए ... आपके उत्तर के लिए धन्यवाद। –

8

bson के लिए एक स्ट्रिंग json बदलने के लिए, कार्य करें:

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); 

json करने के लिए एक bson बदलने के लिए, कार्य करें:

import org.bson.BasicBSONDecoder; 
import org.bson.BSONObject; 

BasicBSONDecoder decoder = new BasicBSONDecoder(); 
BSONObject bsonObject = decoder.readObject(out); 
String json_string = bsonObject.toString(); 
27

... और, 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); 

सरकारी डॉक्स:

संबंधित मुद्दे