2012-03-21 165 views
1

我试图将网站的JSON响应保存到数据库。后者我正在访问这个JSON字符串来处理数据。但我无法将其解析为JSON对象。在分析时我意识到字符串的字符需要被转义。由于我将数据保存为一个字符串,因此作为JSON数据返回的数据结果不会在数据库中转义。有什么方法可以将JSON数据保存到数据库。如何将JSON数据保存到数据库

实施例:

{"RULE":[{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src="[^"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\s*</a>","type":"text"}},{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src="[^"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\s*</a>","type":"text"}}]} 

想要在数据库中保存为(也得到响应时)即“和\被转义

{"RULE":[{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src=\"[^\"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\\s*</a>","type":"text"}},{"replace":{"value":"","type":"text"},"match":{"value":"<a [^>]*><img src=\"[^\"]*WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites[^>]*>\\s*</a>","type":"text"}}]} 

这里是我已经用来保存代码数据库中的数据

     // here the raw_data is the data from the website 
          JSONObject jo = new JSONObject(raw_data); 

      // Get the JSONObject value associated with the search result key. 
      jo = jo.getJSONObject("pipe"); 
         jo = jo.getJSONObject("definition"); 

          String def=jo.toString(); 

       JSONArray jo1=jo.getJSONArray("modules"); 
       JSONArray jo2=jo.getJSONArray("wires"); 

        /* 
        * Write the contents in the data base 
        * 
        *    
        */ 
        def =def.replaceAll("[']", "\\\\\'"); //creates problem for strings with ' 
        def =def.replaceAll("&", "%26"); 

        String tablename="PipesTable2"; 
        System.out.println(def); 
        database d=new database(); 
+1

该网站向您发送一个包含json的字符串。该字符串已经具有必要的转义。如果没有,你收到的json将不可读。所以当你收到数据时你在做什么?这听起来像你正在使用一些json库来取消你收到的数据。可以使用同一个库来重新转义它。 – 2012-03-21 03:13:11

+0

如果您使用正确的数据库操作,则在将数据存储到数据库之前,您不需要将字符串转义。当然,在将它们用作JSON值之前,您可能需要转义(奇怪的)XML/HTML字符串,但这与数据库无关。 – 2012-03-21 03:26:44

+0

@ andrew我已经添加了我写的代码来保存数据库中的数据。其实我正在将数据是JSON转换为一个字符串(原因是我需要用[]括号括起来替换一些内容),然后转换的字符串我保存在数据库 – Judy 2012-03-21 03:30:24

回答

1

你有没有考虑过使用类似Jackson的图书馆(http://wiki.fasterxml.com/JacksonHome)在Json对象和Java对象之间进行转换?然后,您可以使用标准的Java持久性工具和库将它从数据库中保存/读入,并且它会自动处理您的所有转义。

Jackson在Json和Java对象之间转换有两种主要方式。如果您打算使用直接JDBC调用来实现持久性,并且您不想执行其他处理,那么您可以使用“简单数据绑定”。这只是在Json和Java的内置类型(List,Map,String,Boolean,Number)之间进行转换。如果您打算对数据执行Java处理,或者您希望使用像Hibernate这样的持久性框架,则需要“完全数据绑定”。这使用POJO和注解为对象提供更复杂的结构。

有一个很好的,非常简洁的教程涵盖这两个选项的位置: http://wiki.fasterxml.com/JacksonInFiveMinutes

+0

谢谢,我会尝试。我没有看过这些库。你还可以指导我一些例子。这将非常有帮助。 – Judy 2012-03-21 03:00:14

2

我建议你创建具有映射到JSON属性的类。您可以使用第三方工具将对象转换为json或json对象。您可以使用Gson。

现在你可以做什么,当你得到的JOSN你可以将此json转换为对象并将该对象的属性保存到数据库。当您检索该值时,将这些值设置为对象的属性,然后将此对象转换为json。

你可以在这里找到GSON - http://code.google.com/p/google-gson/

这是很容易使用。