zoukankan      html  css  js  c++  java
  • Java中json的构造和解析

    什么是 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 }
    View Code

    二、使用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]
        }
    }
    View Code
  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/zhaoyhBlog/p/6235984.html
Copyright © 2011-2022 走看看