什么是 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 成为理想的数据交换语言。
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};
2. 值的有序列表(An ordered list of values)。
在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];
Java中对json的操作常用的方式有两种:org.json.jar 和 json-lib.jar
一、使用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 }
二、使用json-lib(下载)
json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包:
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.jar
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] } }