什麼是 Json?
JSON(JvaScript Object Notation)(官網網站:http://www.json.org/)是 一種輕量級的數據交換格式。
易於人閱讀和編寫。同時也易於機器解析和生成。它基於 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一個子集。
JSON 採用徹底獨立於語言的文本格式,可是也使用了相似於 C 語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使 JSON 成爲理想的數據交換語言。java
JSON 的兩種結構
1.「名稱/值」對的集合(A collection of name/value pairs)。
不一樣的語言中,它被理解爲對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表 (hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
在 Java 語言中,咱們能夠將它理解成 HashMap。
對象是一個無序的"'名稱/值'對"集合。一個對象以"{"(左括號)開始,"}"(右括號)結束。每一個「名稱」後跟一個":"(冒號);"'名稱/值' 對"之間使用","(逗號)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};json
2. 值的有序列表(An ordered list of values)。
在大部分語言中,它被理解爲數組(Array 或 List)。
數組是值(value)的有序集合。一個數組以"["(左中括號)開始,"]"(右中括號)結束。值之間使用","(逗號)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];數組
Java中對json的操做經常使用的方式有兩種:org.json.jar 和 json-lib.jaride
1、使用org.json.jar(下載)網站
1 import java.util.ArrayList; 2 import java.util.List; 3 import org.json.JSONArray; 4 import org.json.JSONObject; 5 import com.kevin.paper.entity.PubPaper; 6 import com.kevin.paper.entity.PubPaperAuthor; 7 8 public class Test { 9 public String jsonConstruct(){ 10 JSONObject json=new JSONObject(); 11 json.put("Article_id", "66496"); 12 json.put("Title", "Exploring the beta quadrant"); 13 json.put("Author", "Pietarinen, Ahti-Veikko"); 14 json.put("Journal", "SYNTHESE"); 15 json.put("ISSN", "0039-7857"); 16 json.put("PublishDate", "2015-04-01"); 17 json.put("Pages", "941-970"); 18 json.put("SCI", "true"); 19 json.put("EI", "false"); 20 json.put("SSCI", "true"); 21 //嵌套json 22 JSONArray jsonMembers = new JSONArray(); 23 JSONObject author1 = new JSONObject(); 24 author1.put("ZZGH", "150026"); 25 author1.put("ZZXM", "AHTI-VEIKKO PIETARINEN"); 26 author1.put("SFDYZZ","1"); 27 author1.put("SFTXZZ", "1"); 28 jsonMembers.put(author1); 29 json.put("Authors", jsonMembers); 30 31 return json.toString(); 32 } 33 34 public PubPaper jsonAnalysis(){ 35 PubPaper pubPaper = new PubPaper(); 36 String jsonData="{\"Article_id\":66496,\"Title\":\"Exploring the beta quadrant\",\"Author\":\"Pietarinen, Ahti-Veikko\"," + 37 "\"Journal\":\"SYNTHESE\",\"ISSN\":\"0039-7857\",\"PublishDate\":\"2015-04-01\",\"Pages\":\"941-970\"," + 38 "\"SCI\":\"true\",\"EI\":\"false\",\"SSCI\":\"true\"," + 39 "\"Authors\":[{\"ZZGH\":\"150026\",\"ZZXM\":\"AHTI-VEIKKO PIETARINEN\",\"SFDYZZ\":1,\"SFTXZZ\":1}]}"; 40 JSONObject json= new JSONObject(jsonData); 41 pubPaper.setArticle_id(json.get("Article_id").toString()); 42 pubPaper.setTitle(json.get("Title").toString()); 43 pubPaper.setAuthor(json.get("Author").toString()); 44 pubPaper.setJournal(json.get("Journal").toString()); 45 pubPaper.setISSN(json.get("ISSN").toString()); 46 pubPaper.setPublishDate(json.get("PublishDate").toString()); 47 pubPaper.setPages(json.get("Pages").toString()); 48 pubPaper.setSCI(json.get("SCI").toString()); 49 pubPaper.setEI(json.get("EI").toString()); 50 pubPaper.setSSCI(json.get("SSCI").toString()); 51 //解析嵌套的json轉換成對象集合 52 List<PubPaperAuthor> pubAuthorList = new ArrayList(); 53 JSONArray jsonArray=json.getJSONArray("Authors"); 54 for(int i=0;i<jsonArray.length();i++){ 55 JSONObject author=(JSONObject) jsonArray.getJSONObject(i); 56 PubPaperAuthor pubPaperAuthor = new PubPaperAuthor(); 57 pubPaperAuthor.setZZGH(author.get("ZZGH").toString()); 58 pubPaperAuthor.setZZXM(author.get("ZZXM").toString()); 59 pubPaperAuthor.setSFDYZZ(author.get("SFDYZZ").toString()); 60 pubPaperAuthor.setSFTXZZ(author.get("SFTXZZ").toString()); 61 pubAuthorList.add(pubPaperAuthor); 62 } 63 pubPaper.setAuthors(pubAuthorList); 64 return pubPaper; 65 } 66 }
2、使用json-lib(下載)spa
json-lib 是一個 Java 類庫(官網:http://json-lib.sourceforge.net/)能夠實現以下功能:.net
轉換 javabeans, maps, collections, java arrays 和 XML 成爲 json 格式數據
轉換 json 格式數據成爲 javabeans 對象
Json-lib 須要的 jar 包:3d
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jarcode
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.kevin.person.entity.Person; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; public class Test { /** 將 Array 解析成 Json 串。使用 JSONArray 能夠解析 Array 類型 */ public void arrayToJSON() { // 將 Array 解析成 Json 串 String[] str = { "Jack", "Tom", "90", "true" }; JSONArray json = JSONArray.fromObject(str); System.err.println(json);// ["Jack","Tom","90","true"] // 對像數組,注意數字和布而值 Object[] o = { "北京", "上海", 89, true, 90.87 }; json = JSONArray.fromObject(o); System.err.println(json);// ["北京","上海",89,true,90.87] // 使用集合類 List<String> list = new ArrayList<String>(); list.add("Jack"); list.add("Rose"); json = JSONArray.fromObject(list); System.err.println(json);// ["Jack","Rose"] // 使用 set 集 Set<Object> set = new HashSet<Object>(); set.add("Hello"); set.add(true); set.add(99); json = JSONArray.fromObject(set); System.err.println(json);// [99,true,"Hello"] } /** 將 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析 */ public void javaBeanOrMapToJSON() { JSONObject jsonObject = new JSONObject(); // 解析 HashMap Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "Tom"); map.put("age", 33); // 解析 JavaBean Person person = new Person("A001", "Jack"); // jsonObject = jsonObject.fromObject(person); // 解析嵌套的對象 map.put("person", person); jsonObject = JSONObject.fromObject(map); System.out.println(jsonObject);// {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"} } /** 使用 JsonConfig 過慮屬性:適用於 JavaBean/Map */ public void jsonConfigForJavaBeanOrMap() { JsonConfig config = new JsonConfig(); config.setExcludes(new String[] { "name" });// 指定在轉換時不包含哪些屬性 Person person = new Person("A001", "Jack"); JSONObject jsonObject = JSONObject.fromObject(person, config);// 在轉換時傳入以前的配置對象 System.out.println(jsonObject);// {"id":"A001"} } /** 將 Json 串轉換成 Array */ public void jsonToArray() { JSONArray jsonArray = JSONArray.fromObject("[89,90,99]"); Object array = JSONArray.toArray(jsonArray); System.out.println(array);// [Ljava.lang.Object;@1e5003f6 System.out.println(Arrays.asList((Object[]) array));// [89, 90, 99] } /** 將 Json 串轉成 JavaBean/Map */ public void jsonToJavaBeanOrMap() { // 將 Json 形式的字符串轉換爲 Map String str = "{\"name\":\"Tom\",\"age\":90}"; JSONObject jsonObject = JSONObject.fromObject(str); Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class); System.out.println(map);// {age=90, name=Tom} // 將 Json 形式的字符串轉換爲 JavaBean str = "{\"id\":\"A001\",\"name\":\"Jack\"}"; jsonObject = JSONObject.fromObject(str); System.out.println(jsonObject); Person person = (Person) JSONObject.toBean(jsonObject, Person.class); System.out.println(person);// Person [id=A001, name=Jack] } }