JSONObject與JSONArray
Java不像PHP解析和生產JSON老是一個比較痛苦的過程。可是使用JSONObject和JSONArray會讓整個過程相對舒服一些。php
JsonObject和JsonArray區別就是JsonObject是對象形式,JsonArray是數組形式html
須要依賴的包:java
commons-lang.jar web
commons-beanutils.jar json
commons-collections.jar 數組
commons-logging.jar 數據結構
ezmorph.jar app
json-lib-2.2.2-jdk15.jaride
生成JSON:
[java] view plain copythis
print?

- public class Test2 {
-
- public static void main(String[] args) {
-
- /* 建立JsonObject第一種方法 */
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("UserName", "ZHULI");
- jsonObject.put("age", "30");
- jsonObject.put("workIn", "ALI");
- System.out.println("jsonObject1:" + jsonObject);
-
- /* 建立JsonObject第二種方法 */
- HashMap<String, String> hashMap = new HashMap<String, String>();
- hashMap.put("UserName", "ZHULI");
- hashMap.put("age", "30");
- hashMap.put("workIn", "ALI");
- System.out.println("jsonObject2 FROM HASHMAP:" + JSONObject.fromObject(hashMap));
-
- /* 建立一個JsonArray方法1 */
- JSONArray jsonArray = new JSONArray();
- jsonArray.add(0, "ZHULI");
- jsonArray.add(1, "30");
- jsonArray.add(2, "ALI");
- System.out.println("jsonArray1:" + jsonArray);
-
- /* 建立JsonArray方法2 */
- ArrayList<String> arrayList = new ArrayList<String>();
- arrayList.add("ZHULI");
- arrayList.add("30");
- arrayList.add("ALI");
- System.out.println("jsonArray2 FROM ArrayList:" + JSONArray.fromObject(arrayList));
-
- /* 若是JSONArray解析一個HashMap,則會將整個對象的放進一個數組的值中 */
- System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));
-
- /* 組裝一個複雜的JSONArray */
- JSONObject jsonObject2 = new JSONObject();
- jsonObject2.put("UserName", "ZHULI");
- jsonObject2.put("age", "30");
- jsonObject2.put("workIn", "ALI");
- jsonObject2.element("Array", arrayList);
- jsonObject2.element("Object", jsonObject);
- System.out.println("jsonObject2:" + jsonObject2);
-
- }
- }
結果:
[html] view plain copy
print?

- jsonObject1:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
- jsonObject2 FROM HASHMAP:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
- jsonArray1:["ZHULI","30","ALI"]
- jsonArray2 FROM ArrayList:["ZHULI","30","ALI"]
- jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]
- jsonObject2:{"workIn":"ALI","age":"30","Array":["ZHULI","30","ALI"],"UserName":"ZHULI","Object":{"workIn":"ALI","age":"30","UserName":"ZHULI"}
解析JSON:
[html] view plain copy
print?

- package com.xxx.video.resource.controller.web;
-
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
-
-
- public class Test {
-
- public static void main(String[] args) {
-
- String jsonString = "{\"UserName\":\"ZHULI\",\"age\":\"30\",\"workIn\":\"ALI\",\"Array\":[\"ZHULI\",\"30\",\"ALI\"]}";
- /* 將Json字符串轉爲java對象 */
- JSONObject obj = JSONObject.fromObject(jsonString);
-
- /* 獲取Object中的UserName */
- if (obj.has("UserName")) {
- System.out.println("UserName:" + obj.getString("UserName"));
- }
-
- /* 獲取ArrayObject */
- if (obj.has("Array")) {
- JSONArray transitListArray = obj.getJSONArray("Array");
- for (int i = 0; i < transitListArray.size(); i++) {
- System.out.print("Array:" + transitListArray.getString(i) + " ");
- }
- }
- }
- }
返回:
[html] view plain copy
print?

- UserName:ZHULI
- Array:ZHULI Array:30 Array:ALI
對象遍歷
[java] view plain copy
print?

- if (!obj.isNull("sku")) {
- HashMap<String, String> skuMap = new HashMap<String, String>();
- JSONObject skuObject = obj.getJSONObject("sku");
- Iterator<String> keys = skuObject.keys();
- String key;
- Object o;
- while (keys.hasNext()) {
- key = keys.next();
- o = skuObject.get(key);
- skuMap.put(key, String.valueOf(o));
- }
- }
gson使用
gson和其餘現有Java json類庫最大的不一樣時gson須要序列化得實體類不須要使用annotation來標識須要序列化得字段,同時gson又能夠經過使用annotation來靈活配置須要序列化的字段。
生成JOSN
[java] view plain copy
print?

- public class Test2 {
-
- public static void main(String[] args) {
- Gson gson = new Gson();
-
- HashMap<String, String> map = new HashMap<String, String>(); //實例化一個hashmap
- map.put("username", "initphp"); //新增一個數據
- map.put("password", "test");
- map.put("age", "100");
- String mapToJson = gson.toJson(map);
- System.out.println(mapToJson);
- }
-
- }
結果:
[java] view plain copy
print?

- {"username":"initphp","age":"100","password":"test"}
第二種,有肯定的數據結構:
有一個person的類了
[java] view plain copy
print?

- publicclass Person {
-
- private String name;
- privateint age;
-
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * @param name the name to set
- */
- publicvoid setName(String name) {
- this.name = name;
- }
-
- /**
- * @return the age
- */
- publicint getAge() {
- return age;
- }
-
- /**
- * @param age the age to set
- */
- publicvoid setAge(int age) {
- this.age = age;
- }
-
- @Override
- public String toString()
- {
- return name +":"+age;
- }
- }
[java] view plain copy
print?

- public class Test2 {
-
- public static void main(String[] args) {
- Gson gson = new Gson();
-
- List<Person> persons = new ArrayList<Person>();
- for (int i = 0; i < 10; i++) {
- Person p = new Person();
- p.setName("name" + i);
- p.setAge(i * 5);
- persons.add(p);
- }
- String str = gson.toJson(persons);
- }
- }
結果:
[html] view plain copy
print?

- [{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]
解析JSON
JSON字符串轉對象稍微複雜點。分多種狀況。
第一種,咱們沒法肯定JSON裏面的數據結構,可是能判斷這個JSON是一維的結構,咱們能夠用HashMap來裝載這個數據。
[java] view plain copy
print?

- public class Test2 {
-
- public static void main(String[] args) {
- Gson gson = new Gson();
-
- String hashString = "{\"username\":\"initphp\", \"age\":\"100\"}";
- HashMap<String, String> map = gson.fromJson(hashString,
- new TypeToken<HashMap<String, String>>() {
- }.getType());
- System.out.print(map.get("age"));
- }
- }
第二種,有肯定的數據結構:
[java] view plain copy
print?

- Person person = gson.fromJson(str, Person.class);