基于java解析JSON的三种方式详解
本文实例分析了基于java解析json的三种方式。分享给大家供大家参考,具体如下:
一、什么是json?
json是一种取代xml的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
json就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {"name": "michael"} 可以理解为是一个包含name为michael的对象
而[{"name": "michael"},{"name": "jerry"}]就表示包含两个对象的数组
当然了,你也可以使用{"name":["michael","jerry"]}来简化上面一部,这是一个拥有一个name数组的对象
二、json解析之传统的json解析
1、生成json字符串
public static string createjsonstring(string key, object value) { jsonobject jsonobject = new jsonobject(); jsonobject.put(key, value); return jsonobject.tostring(); }
2、解析json字符串
分为以下三种情况,一个javabean,一个list数组,一个嵌套map的list数组:
import java.util.arraylist; import java.util.hashmap; import java.util.iterator; import java.util.list; import java.util.map; import org.json.jsonarray; import org.json.jsonobject; import com.android.myjson.domain.person; /** * 完成对json数据的解析 * */ public class jsontools { public static person getperson(string key, string jsonstring) { person person = new person(); try { jsonobject jsonobject = new jsonobject(jsonstring); jsonobject personobject = jsonobject.getjsonobject("person"); person.setid(personobject.getint("id")); person.setname(personobject.getstring("name")); person.setaddress(personobject.getstring("address")); } catch (exception e) { // todo: handle exception } return person; } public static list getpersons(string key, string jsonstring) { list list = new arraylist(); try { jsonobject jsonobject = new jsonobject(jsonstring); // 返回json的数组 jsonarray jsonarray = jsonobject.getjsonarray(key); for (int i = 0; i < jsonarray.length(); i++) { jsonobject jsonobject2 = jsonarray.getjsonobject(i); person person = new person(); person.setid(jsonobject2.getint("id")); person.setname(jsonobject2.getstring("name")); person.setaddress(jsonobject2.getstring("address")); list.add(person); } } catch (exception e) { // todo: handle exception } return list; } public static list getlist(string key, string jsonstring) { list list = new arraylist(); try { jsonobject jsonobject = new jsonobject(jsonstring); jsonarray jsonarray = jsonobject.getjsonarray(key); for (int i = 0; i < jsonarray.length(); i++) { string msg = jsonarray.getstring(i); list.add(msg); } } catch (exception e) { // todo: handle exception } return list; } public static list> listkeymaps(string key, string jsonstring) { list> list = new arraylist>(); try { jsonobject jsonobject = new jsonobject(jsonstring); jsonarray jsonarray = jsonobject.getjsonarray(key); for (int i = 0; i < jsonarray.length(); i++) { jsonobject jsonobject2 = jsonarray.getjsonobject(i); map map = new hashmap(); iterator iterator = jsonobject2.keys(); while (iterator.hasnext()) { string json_key = iterator.next(); object json_value = jsonobject2.get(json_key); if (json_value == null) { json_value = ""; } map.put(json_key, json_value); } list.add(map); } } catch (exception e) { // todo: handle exception } return list; } }
三、json解析之gson
1、生成json字符串
import com.google.gson.gson; public class jsonutils { public static string createjsonobject(object obj) { gson gson = new gson(); string str = gson.tojson(obj); return str; } }
2、解析json
import java.util.arraylist; import java.util.list; import java.util.map; import com.google.gson.gson; import com.google.gson.reflect.typetoken; ; public class gsontools { public gsontools() { // todo auto-generated constructor stub } /** * @param * @param jsonstring * @param cls * @return */ public static t getperson(string jsonstring, class cls) { t t = null; try { gson gson = new gson(); t = gson.fromjson(jsonstring, cls); } catch (exception e) { // todo: handle exception } return t; } /** * 使用gson进行解析 list * * @param * @param jsonstring * @param cls * @return */ public static list getpersons(string jsonstring, class cls) { list list = new arraylist(); try { gson gson = new gson(); list = gson.fromjson(jsonstring, new typetoken>() { }.gettype()); } catch (exception e) { } return list; } /** * @param jsonstring * @return */ public static list getlist(string jsonstring) { list list = new arraylist(); try { gson gson = new gson(); list = gson.fromjson(jsonstring, new typetoken>() { }.gettype()); } catch (exception e) { // todo: handle exception } return list; } public static list> listkeymaps(string jsonstring) { list> list = new arraylist>(); try { gson gson = new gson(); list = gson.fromjson(jsonstring, new typetoken>>() { }.gettype()); } catch (exception e) { // todo: handle exception } return list; } }
四、json解析之fastjson
import java.util.arraylist; import java.util.list; import java.util.map; import com.alibaba.fastjson.json; import com.alibaba.fastjson.typereference; public class jsontool { public static t getperson(string jsonstring, class cls) { t t = null; try { t = json.parseobject(jsonstring, cls); } catch (exception e) { // todo: handle exception } return t; } public static list getpersonlist(string jsonstring, class cls) { list list = new arraylist(); try { list = json.parsearray(jsonstring, cls); } catch (exception e) { // todo: handle exception } return list; } public static list> getpersonlistmap1( string jsonstring) { list> list = new arraylist>(); try { list = json.parseobject(jsonstring, new typereference>>() { }.gettype()); } catch (exception e) { // todo: handle exception } return list; } }
总结:
json对于移动设备来说,尤其对于网络环境较差和流量限制的情况下,相对于xml格式的数据传输会更节省流量,传输效率更高。在这三种解析方式中fastjson是效率最高的,推荐使用。
ps:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用: 在线json代码检验、检验、美化、格式化工具: json在线格式化工具: 在线xml/json互相转换工具: json代码在线格式化/美化/压缩/编辑/转换工具: 在线json压缩/转义工具: c语言风格/html/css/json代码格式化美化工具:
希望本文所述对大家java程序设计有所帮助。