2012-03-21 3 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 для отмены данных, которые вы получаете. эту же библиотеку можно использовать для ее повторного запуска. –

+0

Если вы используете правильные операторы БД, вам не нужно будет избегать строк, прежде чем хранить их в БД. Конечно, вам может понадобиться избежать ваших (странных) строк XML/HTML, прежде чем использовать их в качестве значений JSON, но это не зависит от базы данных. –

+0

@ andrew Я добавил код, который я написал для сохранения данных в базе данных. Фактически я конвертирую данные, которые являются JSON в строку (причина в том, что мне нужно заменить некоторое содержимое, например {} скобки на []), а затем эту преобразованную строку, которую я сохраняю в базе данных – Judy

ответ

1

Вы рассматривали использование библиотеки, такой как Джексон ()) для перевода между объектами Json и объектами Java? Затем вы можете использовать стандартные инструменты и библиотеки Java для сохранения, чтобы сохранить их/прочитать в своей базе данных, и автоматически обработает все ваши экраны.

У Джексона есть два основных способа, которыми он переводится между объектами Json и Java. Если вы планируете использовать прямые вызовы JDBC для вашей настойчивости, и вы не хотите делать много другой обработки, тогда вы можете уйти с помощью «простого привязки данных». Это просто переводит между встроенными типами Json и Java (List, Map, String, Boolean, Number).

Если вы планируете выполнять обработку Java на данных или хотите использовать инфраструктуру сохранения, такую ​​как Hibernate, вам понадобится «Полное привязку данных». Это использует POJO и аннотации, чтобы обеспечить более сложную структуру для ваших объектов.

Существует хорошая, очень сжато учебник, охватывающий оба варианта здесь: http://wiki.fasterxml.com/JacksonInFiveMinutes

+0

Спасибо, я попробую. Я не смотрел эти библиотеки. Можете ли вы также привести меня к некоторым примерам. Это будет очень полезно. – Judy

2

Я предлагаю вам создать класс, имеющий свойства, отображенные в формате JSON. Вы можете преобразовать объект в json или json в объект с помощью стороннего инструмента. Вы можете использовать Gson.

Теперь, что вы можете сделать, когда получите josn, вы можете преобразовать этот json в объект и сохранить свойства этого объекта в базе данных. когда вы извлекаете значение, установите это значение в свойства объекта и затем преобразуйте этот объект в json.

Вы можете найти здесь Gson - http://code.google.com/p/google-gson/

Это простой в использовании.

Смежные вопросы