json介绍:http://json.org/json-zh.html
JSON是轻量级的数据交换格式(常用于网络传输如http等);
构建于两种结构:key/value;值的有序列表(数组、list等);
在java中实现对象与json的装换:Gson、JsonObject、fastjson、Jackson
- JsonObject: 依赖较多,对于复类型的转换有缺陷;使用简单;
- json-lib主页:http://json-lib.sourceforge.net/
- json-lib是beans、collections、maps、java、arrays、xml与json相互转换的包;
- JsonObject API: http://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.html
- Gson:https://github.com/google/gson
- Gson可以在不注解源码的基础上使用;允许自定义对象的表现形式(驼峰式,首字母大写,下划线等)(@SerializedName);
- Gson提供了fromJson()和toJson()两个直接用于解析和生成Json的方法,前者实现反序列化,后者实现序列化。同时每个方法都提供了重载方法;
- @SerializedName注解:PHP和js在命名时一般采用下划线风格,Java中一般采用驼峰式,Gson在序列化和反序列化时需要使用反射(注解使用情况很多),通过@SerializedName实现json中key的表现形式(可同时存在多种形式);
- Gson使用泛型:对于json字符串,使用Gson解析时,可以使用数组和List,而List对于增删比较方便,使用较多。
- 使用数组
Gson gson = new Gson();
String jsonArray = "[\"JAVA\",\"PYTHON\",\"SHELL\"]";
String[] strs = gson.fromJson(jsonArray, String[].class);
- 在使用List时,不能直接将String[].class替换为List<String>.class,因为对于java来说,存在泛型擦除,对个有着不同类型的字节码文件只有List.class。Gson提供了TypeToken来实现对泛型的支持,TypeToken的构造方法是protected。
Gson gson = new Gson();
String jsonArray = "[\"JAVA\",\"PYTHON\",\"SHELL\"]";
List<String> strList = gson.fromJson(jsonArray, new TypeToken<List<String>>(){}.getType());
Gson gson = new Gson();
gson.toJson(Object);
gson.fromJson(Reader, Class);
gson.fromJson(String, Class);
gson.fromJson(Reader, Type);
gson.fromJson(String, Type);
- 解析: http://www.jianshu.com/p/fc5c9cdf3aab(各种注解的使用);http://www.jianshu.com/p/e740196225a4
- Gson API : http://www.javadoc.io/doc/com.google.code.gson/gson/2.8.1