2016-08-19 16 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是很常见的,所以我猜测你不会遇到快速提取它的问题。