Фонд матрас
В Java есть много либеров о JSON, таких как Jackjson, Fastjson, Gson и т. Д. Я использовал их, но это все еще кажется слишком тяжелым для программистов, которым нужно только заставить объект Java вернуть строку JSON. Более того, некоторые функции очень настраиваемы. Например, когда атрибут объекта Java пуст, эти компоненты не выводят. Поэтому, когда я пробегаю объект списка на странице, я всегда должен судить, является ли этот атрибут неопределенным, что делает меня очень недовольным. Поэтому я решил потратить некоторое время, чтобы изучить, что происходит.
Но после пристального взгляда на утро я обнаружил, что и Fastjson, и Gson были написаны очень сложным образом, и не было никаких соответствующих документов или комментариев, поэтому я наконец сдался. Поэтому я нашел относительно простой пакет Java, который возвращает JSON на www.json.com. Эта LIB нуждается только в 5 классах Java, что именно я хочу. Следует отметить, что официальный jsonarray не поддерживает прямое преобразование Javabeans. Например, такие вещи, как список <user>, не могут быть преобразованы. Они должны быть преобразованы в такой формат, как список <Map> для преобразования, поэтому я его изменил. Официальные документы включают:
Позвольте мне сначала представить основное использование.
Используйте класс jsonObject для обработки основных объектов Java, и использование примерно следующим образом:
public void testmap () {map <string, object> map = new hashmap <string, object> (); map.put ("name", "qiu"); map.put ("пароль", "123"); map.put ("адрес", "Китай"); Пользователь пользователь = новый пользователь (); user.setusername ("qiuqiu"); user.setpassword ("123456"); user.getTels (). Add ("1234445556677"); user.getTels (). Add ("6893493458585"); map.put («пользователь», пользователь); JsonObject json = new jsonObject (map); System.out.println (json.toString ()); } Если это объект коллекции, используется класс Jsonarray, а использование следующим образом:
public void testlist () throws jsonexception {list <user> list = new ArrayList <user> (); Пользователь пользователь = новый пользователь (); user.setusername ("qiuqiu"); user.setpassword ("123456"); user.getTels (). Add ("1234445556677"); user.getTels (). Add ("6893493458585"); Пользователь пользователь2 = новый пользователь (); user2.setusername ("Китай"); user2.getTels (). Add ("1234444556677"); user2.getTels (). Add ("6893493458585"); list.add (пользователь); list.add (user2); Jsonarray json = new jsonarray (список); System.out.println (json.tostring (2)); } Из приведенного выше кода мы видим, что использование этой LIB довольно просто. Это не требует нового объекта, такого как GSON, а дизайн FastJson также несколько неразумно. Во втором коде, выше, существует ToString (2), который указывает вывод путем рассмотрения двух пространств в новой строке.
Вышеуказанное только вводит основное использование, но это не то, что вы хотите. Вы хотите, чтобы вернуть пустую строку, когда свойство объекта пустое, а не ничего не возвращать. Хотя есть только 5 классов, мне потребовалось два или три часа, чтобы найти место. В jsonObject есть метод, называемый PopulateMap, и в конце есть небольшой кусок кода:
Object result = method.invoke (bean, (Object []) null); if (result! = null) {this.map.put (key, wrap (result)); }То есть, когда метод GET называется и возвращается как нулевая, это свойство не выводится. Конечно, это очень просто изменить:
Object result = method.invoke (bean, (Object []) null); this.map.put (key, result == null? "": wrap (result));
Это, наконец, решило проблему, которую я хотел решить. Конечно, эта LIB официально привезена JSON и написана довольно просто. Это более подходит для ситуаций, когда одновременно есть только несколько или десятки данных, такие как дисплей на странице. Если объем данных, передаваемых за раз, относительно велик, вы можете рассмотреть возможность использования FastJson и т. Д., Но я лично думаю, что в большинстве случаев наиболее необходимой настройкой является настройка. Например, если вы иногда находите определенный компонент, который не может удовлетворить потребности, компонент не имеет документации или комментариев, а код трудно понять, что в основном совпадает с открытым исходным кодом, так что он не имеет значения.
Пример резюме
импортировать java.io.ioexception; Импорт java.io.printwriter; Импорт javax.servlet.http.httpservletresponse; Импорт com.alibaba.fastjson.json; Импорт com.alibaba.fastjson.serializer.serializerfeature; / **** Веб-сервер возвращает класс инструментов JSON* Класс инструментов зависит от FastJson* Class Class поддерживает возврат данных JSON и JSONP Format* @Author [email protected]**/ public class responseJsonUtils {/ *** Кодирование символов по умолчанию*/ private Static String inCoding = "UTF-8"; / *** JSONP Функция обратного вызова по умолчанию*/ private Static String Callback = "callback"; /*** Настройки сериализации FastJson*/Private Static SerializerFeature [] features = new SerializerFeature [] {// Вывод значения NULL в MAP SerializerFeature.WriteMapnullValue, // Если логический объект нулевой, то выходной сигнал. Serializerfeature.writenullistristasempty, // Если номер нулевой, выход равен 0 serializerfeature.writenullnumberaszero, // Выход NULL String Serializerfeature.writenullStringSempty, // Форматируйте дату вывода serializerfeature.writedateformat}; / *** serialize java объект json* @param obj java объект, который требует json serialization* @return json string*/ private static String tojsonstring (Object obj) {return json.tojsonstring (obj, функции); }/*** Возврат данные формата json* @param response* @param data java -объект, который будет возвращен* @param кодирование возврата формата кодирования строки json*/public static void json (httpservletresponse response, intemple/rain; response.setcharacterencoding (кодирование); Printwriter Out = null; try {out = response.getWriter (); out.write (tojsonstring (data)); out.flush (); } catch (ioException e) {e.printstackTrace (); }} / *** Возврат данные формата JSON, используя кодирование по умолчанию* @param response* @param data java объект, который будет возвращен* / public static void json (httpservletresponse response, data data) {json (ответ, данные, кодирование); } / *** Возвращает данные JSONP, используя функции кодирования по умолчанию и по умолчанию. } / *** Возвращает данные JSONP, используя кодирование по умолчанию* @param response* @param обратный вызов JSONP Имя обратного вызова* @param Data JSONP Data* / public static void jsonp (httpservletresponse, ответ, обратный обратный вызов, объект) {jsonp (ответ, обратный вызов, Data, Encoding); } / *** return jsonp data* @param response* @param обратный вызов jsonp name function* @param data jsonp data* @param Кодирование данных jsonp* / public static void jsonp (httpservelletresponse, обратный вызов, объектный, incoding) {stringbuffer sb = new StringBuffer (Callback); sb.append ("("); sb.append (tojsonstring (data)); sb.append (");"); // Установите ответ в формате кодирования.setContentType ("text/plain; charset =" + кодирование); response.setcharacterencoding (кодирование); Printwriter Out = null; try {out = response.getWriter (); out.write (sb.toString ()); out.flush (); } catch (ioException e) {e.printstackTrace (); }} public Static String getEncoding () {return Encoding; } public static void setEncoding (string encoding) {responsejsonutils.encoding = encoding; } public Static String getCallback () {return обратный вызов; } public static void setCallback (string callback) {responsejsonutils.callback = callback; }}
/*** Возврат данные JSON в сервисе*/@Webservlet ("/json.do") открытый класс Jsonservlet Extends httpservlet {private Static Long Long SerialVersionUID = 7500835936131982864L; / *** Возвращение данных формата JSON*/ Защищенный сервис void (httpservlectrequest, httpservletresponse response) throws servletexception, ioexception {map <string, object> data = new hashmap <string, object> (); data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); Responsejsonutils.json (ответ, данные); }} /*** Сервлет возвращает данные формата jsonp*/@webservlet ("/jsonp.do") public class jsonpservlet extends httpservlet {private static final long serialversionuid = -8343408864035108293l; /*** Запрос отправит параметр обратного вызова в качестве функции обратного вызова. Если параметр обратного вызова не отправляется, функция обратного вызова по умолчанию будет использоваться*/Защищенная служба void (httpservletrequest, httpservletresponse response), выбросы Servletexception, ioException {// Функция обратного вызова, отправленная клиентской строкой. Map <string, object> data = new hashmap <string, object> (); data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); if (callback == null || callback.length () == 0) {// Если клиент не отправляет функцию обратного вызова, используйте функцию обратного вызова по умолчанию. } else {// Использовать функцию обратного вызова клиента actions jsonutils.jsonp (response, callback, data); }}}} / ** * Возврат json и jsonp в Struts2 */ public class jsonaction расширяет ActionSupport {Private Static Long Long SerialVersionUID = 5391000845385666048L; / *** JSONP FUNCTION FUNCTION*/ Private String Callback; / ** * return json */ public void json () {httpservletresponse response = servletactionContext.getResponse (); Map <string, object> data = new hashmap <string, object> (); data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); Responsejsonutils.json (ответ, данные); } / ** * return jsonp * / public void jsonp () {httpservletresponse response = servletactionContext.getResponse (); Map <string, object> data = new hashmap <string, object> (); data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); if (callback == null || callback.length () == 0) {// Если клиент не отправляет функцию обратного вызова, используйте функцию обратного вызова по умолчанию. } else {// Использовать функцию обратного вызова клиента actions jsonutils.jsonp (response, callback, data); }} public String getCallback () {return callback; } public void setCallback (String callback) {this.callback = callback; }} Импорт org.springframework.steretype.controller; Импорт org.springframework.web.bind.annotation.requestmapping; /*** Spring MVC возвращает JSON и JSONP DATA*/@Controller @Requestmapping ("/json") открытый класс jsoncontroller {/*** return json data* @param repress* @param*/@requestmapping ("/json.do") public void (httpserverquest repsectsepsespespespespespespespespes Object> data = new HashMap <String, Object> (); data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); Responsejsonutils.json (ответ, данные); }/*** return jsonp data* @param обратный обратный вызов jsonp* @param запрос* @param response*/@requestmapping ("/jsonp.do") public void json (обратный вызов строки, httpservletrequest, httpservlectresponse response) {map <string> data> data = new hashmap <string>; data.put ("date", new Date ()); data.put ("email", "[email protected]"); data.put («возраст», 30); data.put ("name", "csdn"); data.put ("массив", новый int [] {1,2,3,4}); if (callback == null || callback.length () == 0) {// Если клиент не отправляет функцию обратного вызова, используйте функцию обратного вызова по умолчанию. } else {// Использовать функцию обратного вызова клиента actions jsonutils.jsonp (response, callback, data); }}}