2016-08-19 51 views
0

我可以將總共json對象存儲到MongoDB中嗎?將總共json對象存儲到MongoDB中

就像我擁有該json的URL一樣。

任何人都可以在Gradle中講述嗎?

+0

是的,您可以將完整的JSON對象存儲在MongoDB中。 – notionquest

+0

好吧,謝謝你,但你可以提供任何代碼,但我很困惑它是如何在gradle –

+0

歡迎來到堆棧溢出!您能否在解決問題的努力中獲得更好的標題和更詳細的內容信息? – manetsus

回答

0

你是想直接將對象存儲到MongoDB中,還是要使用中間人?例如,您可以編寫一個程序調用URL,接收JSON響應,解析它並插入數據。

您通常可以通過將「.json」添加到URL的末尾來捕獲響應。將生成一個帶有JSON響應的文本文件。下面是一個網站,它可以從一個示例JSON對象生成Java類(只需將文本文件剪切/粘貼到頁面的文本框中):http://pojo.sodhanalibrary.com/

因此,您需要捕獲單個對象的JSON響應,將其粘貼到網站並且會生成一個Java類(或多個類)。在你的項目中加載這個類。 (當然,你不必使用Java,但這就是我用於這個例子的東西。)

然後你編寫一個驅動程序,它可以調用任何你需要的JSON URLs,創建一個臨時類對象爲每個響應,並將值傳遞給數據庫。對於多個JSON響應(我假設你會處理這些響應),您可以通過將JSON頁面動態追加到for循環中的基本URL來實現此目的。

HttpGet request = new HttpGet("https://someSite.com + "/someContainer/" + listOfEndpointsStoredInArray.get(i) + ".json"); 

每次循環執行時,都會收到一個新的JSON響應。有各種可用於將JSON響應轉換爲對象的軟件包,例如GSON。

棒這種反應爲String:

HttpClient hc = hcBuilder.build(); 
    HttpResponse response = hc.execute(request, hccContext); 
    HttpEntity body = response.getEntity(); 
    InputStream is = body.getContent(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("utf-8"))); 
    String line; 
    StringBuilder sb = new StringBuilder(); 
    while((line=br.readLine())!=null) { // convert JSON response to String and process the response 
     sb.append(line); 

傳遞響應幫手......

processJSON(sb.toString()); 

...和喜歡的東西(使用Java這裏)這種解析它:

Gson gson = new Gson(); 
    anObject = gson.fromJson(resp, MyObject.class); // "MyObject" is the class you generated from the JSON response, using http://pojo.sodhanalibrary.com/ 

現在你已經存儲了一個Java對象,它存儲了JSON對象的所有值。它通過使用常規JDBC連接,像這樣蒙戈到:

Connection conn = null; 
    Statement stmt = null; 
    String sql = null; 
    PreparedStatement pst = null; 

    try{ 

    Class.forName("com.mongodb.jdbc.MongoDriver"); 
    String url = "jdbc:mongodb://localhost;databasename=myDatabase;"; 
    conn=DriverManager.getConnection(url); 

    // begin insertion 

    conn.setAutoCommit(true); 
    stmt=conn.createStatement(); 

    sql = "INSERT INTO table(value1, value2) "+ 
      " VALUES (?,?);"; 
    pst = conn.prepareStatement(sql); 


    pst.setString(1,this.getSomevariable1()); 
    pst.setString(2, this.getSomevariable2()); 

這裏的關鍵是瞭解如何序列化工作。如果你理解這個概念,那麼解決方案是微不足道的。如果你不......好,請學習!不過,JSON和SOAP是很常見的,所以我猜測你不會遇到快速提取它的問題。