Как сохранить данные JSON в базу данных - PullRequest
2 голосов
/ 21 марта 2012

Я пытаюсь сохранить ответ 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"}}]}

Хотите сохранить в базе данных как (также получая ответ как) то есть "и\ escaped

   {"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();

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

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

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

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

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

1 голос
/ 21 марта 2012

Рассматривали ли вы использование такой библиотеки, как Джексон (http://wiki.fasterxml.com/JacksonHome) для перевода между объектами Json и объектами Java? Затем вы можете использовать стандартные инструменты и библиотеки Java для сохранения данных, чтобы сохранить их в вашей базе данных или прочитать их, и она автоматически обработает все ваши побеги.

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

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

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

...