1.json簡單介紹
1.1 json是最流行和廣泛通用的數據傳輸格式,簡稱JavaScript Object Notation,最早在JavaScript中使用.
1.2 舉個例子,下面是一個json對象,名字叫王尼瑪,他有兩個粉絲組成數組,一個叫小王,一個叫小尼瑪:
{
"name":"王尼瑪",
"fans":[{
"name":"小王",
"age":"7"
},{
"name":"小尼瑪",
"age":"10"
}]
}
2.json數據生成和解析
2.1 關於json處理的包有好幾類,開源jackson,谷歌Gson,阿里巴巴的Fastjson.Gson功能強大,但是Fastjson性能更快.如何選擇見仁見智就行
2.2 這里我開始都是用org.json,后面為了演示復雜json轉java bean又導入了功能強大的Gjson,先附上兩個maven依賴:
<!-- https://mvnrepository.com/artifact/org.json/json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.7</version> </dependency>
2.3 json數據的生成,也就是各種類型轉json.(String,map和java bean)
DemoCreateJson.java
import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by garfield on 2016/10/16. * 舉三種創建json的例子 */ public class DemoCreateJson { public static void main(String[] args) { StringCreateJson(); mapCreateJson(); beanCreateJson(); } //String創建json /** * { "name":"王尼瑪", "fans":[{ "name":"小王", "age":"7" },{ "name":"小尼瑪", "age":"10" }] } */ static void StringCreateJson(){ JSONObject jsonObject = new JSONObject(); jsonObject.put("name","王尼瑪"); //粉絲是個數組,其實就是嵌套json JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("name","小王"); jsonObject1.put("age",7); JSONObject jsonObject2 = new JSONObject(); jsonObject2.put("name","小尼瑪"); jsonObject2.put("age",10); //從此處可以看出其實list和json也是互相轉換的 List<JSONObject> jsonObjects = new ArrayList<JSONObject>(); jsonObjects.add(jsonObject1); jsonObjects.add(jsonObject2); jsonObject.put("fans",jsonObjects); System.out.println("jsonObject直接創建json:" + jsonObject); } //第二種方法,用map方式 static void mapCreateJson(){ Map<String,Object> map = new HashMap<String,Object>(); map.put("name","王尼瑪"); Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("name","小王"); map1.put("age",7); Map<String,Object> map2 = new HashMap<String,Object>(); map2.put("name","小尼瑪"); map2.put("age",10); List<Map> jsonObjects = new ArrayList<Map>(); jsonObjects.add(map1); jsonObjects.add(map2); map.put("fans",jsonObjects); System.out.println("集合中Map創建json對象:" + new JSONObject(map)); } //第三種,也是比較常用的,用bean轉換,(這里用的是map作為子json,如果必須要創建復雜bean對象,建議用Gjson操作) static void beanCreateJson(){ Actor actor = new Actor(); actor.setName("王尼瑪"); Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("name","小王"); map1.put("age",7); Map<String,Object> map2 = new HashMap<String,Object>(); map2.put("name","小尼瑪"); map2.put("age",10); List<Map> maps = new ArrayList<Map>(); maps.add(map1); maps.add(map2); actor.setFans(maps); System.out.println("java bean創建json對象:" + new JSONObject(actor)); } }
2.3.1上面類缺少基本bean
Actor.java
import java.util.List; import java.util.Map; /** * Created by garfield on 2016/10/16. */ public class Actor { private String name; private List<Map> fans; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Map> getFans() { return fans; } public void setFans(List<Map> fans) { this.fans = fans; } }
2.4 json的解析,這里寫了兩種解析方式,同樣,比較常用的還是第二種,json轉java bean
DemoParseJson.java
import com.google.gson.*; import org.json.JSONObject; import java.util.Map; /** * Created by garfield on 2016/10/16. */ public class DemoParseJson { public static void main(String[] args) { String jsonString = "{\"fans\":[{\"name\":\"小王\",\"age\":7},{\"name\":\"小尼瑪\",\"age\":10}],\"name\":\"王尼瑪\"}"; normalParse(jsonString); beanParse(jsonString); } static void normalParse(String jsonString){ JSONObject jsonObject = new JSONObject(jsonString); //獲取普通屬性 System.out.println("姓名:"); System.out.println(" " + jsonObject.getString("name")); //獲取數組 System.out.println("粉絲:"); for (Object fan : jsonObject.getJSONArray("fans")) { JSONObject object = (JSONObject)fan; System.out.println(" 姓名:" + object.get("name") + ",年齡:" + object.get("age")); } } //org.json並不支持這種復雜的bean轉換,所以這邊又導入了gson的包 static void beanParse(String jsonString){ System.out.println("=========Gson解析========="); JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject(); Actor actor = new Gson().fromJson(obj,Actor.class); System.out.println("姓名:"); System.out.println(" " + obj.get("name")); System.out.println("粉絲:"); for (Map map : actor.getFans()) { System.out.println(" 姓名:" + map.get("name") + "年齡:" + map.get("age")); } } }
2.4.1順便附上執行結果:
姓名: 王尼瑪 粉絲: 姓名:小王,年齡:7 姓名:小尼瑪,年齡:10 =========Gson解析========= 姓名: "王尼瑪" 粉絲: 姓名:小王年齡7.0 姓名:小尼瑪年齡10.0
ok,that's it...