2017-04-22 94 views
0

我有一個問題,解析從MongoCursor獲得的與JsonNode一起使用的字符串。我試圖讓MongoCursor返回的Json與我的Spring SQL POJO一起工作,所以我可以將它插入到我的SQL數據庫中。基本上這是一個數據庫轉換,SQL結束僅用於歷史存儲。我沒有使用spring的mongo,因爲這些字段與POJO的字段有些不同(MongoDB和SQL有略微不同的模式)Spring&MongoCursor&Jackson JsonNode(數據庫轉換)

目前,它通過使用模式匹配器/字符串拆分和替換,然後替換HashMap,所以我可以獲得每個字段的鍵和值對,然後將其插入到我的彈簧POJO中。我知道我也可以使用傑克遜的POJO工作,但被告知使用jsonNode作爲更好的解決方案。必須有一些我錯過了。

在傑克遜文檔中, 「JSON」 字符串的格式是:

{\ 「顏色\」:\ 「黑色\」 \ 「類型\」:\ 「BMW \」}

但是,這不會是MongoCursor返回給我的情況。隨着光標,我得到的是這樣的:

文件{{_ ID = G8HQW9123,用戶=測試}}

這是我使用的字符串模式匹配和的replaceAll減少到:

{_id:G8G8HQW9123,用戶:測試}

然而,傑克遜的斜線和雙引號都扔我了,無法解析。我錯過了什麼嗎?或者我必須在我的代碼中加入那些斜線&引號才能使其工作?目前正在獲取請求雙引號的分析錯誤。

回答

0

我想你在這裏錯過了一些東西。

MongoCursor正在給您返回Document對象,而不是String

你打電話給Document.toString()並使用String結果嗎?

應該沒有必要爲你做任何字符串解析。您應該能夠從Mongo中取出Document對象,並調用其上的getter函數以獲取所需的字段,這些字段也將保留它們的數據類型(字符串,數字,布爾值和日期),例如全部檢查BsonDocument class Javadocs上的功能:https://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BsonDocument.html

+0

Java IDE告訴我使用MongoCursor。它沒有任何getter函數,我不得不使用tostring輸出任何內容。一旦我在週一到達那臺計算機,我會看看Document對象。 感謝提示 – Slodin

0

您必須從Document的json創建JSONNode

喜歡的東西

ObjectMapper mapper = new ObjectMapper(); 
ObjectReader reader = mapper.reader(JsonNode.class); 
//document from Mongo Cursor 
JsonNode node = reader.readValue(document.toJson()); 

OR

從原始JSON字符串創建JSONNode你應該爲原料JSON字符串存儲在MongoDB中

蒙戈DB電流輸出爲JSON是文檔與關鍵值對。

您錯過了將文檔轉換爲字符串到JSONNode的技巧。

OR

文件是實現地圖等都可能是你可以跳過JSON節點部分和提取文件的映射,直接將其保存到SQL數據庫。

我認爲你需要第一個解決方案,但你可以通過調整你的設置來使用上述方法之一。

+0

Java IDE告訴我使用MongoCursor。它沒有任何getter函數,我不得不使用tostring輸出任何內容。一旦我在星期一到達那臺計算機,我會看看Document對象。感謝提示 – Slodin

+0

不客氣。是的,你必須迭代mongocursor。類似於'while(cursor.hasNext())的文檔document = cursor.next(); \t}' – Veeram

+0

我錯過了jsonnode的文檔,因爲我宣稱沒有類型的MongoCursor ..現在MongoCursor 工程...現在,我閱讀@Alex BSON文檔來獲取它。雖然你是正確的,我必須把它給他的那個鏈接,幫助我 – Slodin