zoukankan      html  css  js  c++  java
  • JSON

    什么是json(转载:https://www.bejson.com/knownjson/maintlogin.jsp

      JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度,

    那么,JSON到底是什么?

      JSON就是一串字符串 只不过元素会使用特定的符号标注。

      • {} 双括号表示对象
      • [] 中括号表示数组
      • "" 双引号内是属性或值
      • : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

    所以  {"name": "Michael"}  可以理解为是一个包含name为Michael的对象

    而  [{"name": "Michael"},{"name": "Jerry"}]  就表示包含两个对象的数组

    当然了,你也可以使用  {"name":["Michael","Jerry"]}  来简化上面一部,这是一个拥有一个name数组的对象

    注意:

    {name:'json'}在检验时通过不了,那是因为JSON官网最新规范规定

    如果是字符串,那不管是键或值最好都用双引号引起来,所以上面的代码就是{"name":"json"}

    JSON与XML比较

    •   可读性:XML胜出;
    •   解码难度:JSON本身就是JS对象(主场作战),所以简单很多;
    •   流行度:XML已经流行好多年,但在AJAX领域,JSON更受欢迎。

    把Java对象转换成JSON对象

      apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串。也可以把JavaBean转换成JSON字符串

    json-lib的核心jar包有:  json-lib.jar

    json-lib的依赖jar包有:commons-lang.jar、commons-beanutils.jar、commons-logging.jar、commons-collections.jar、ezmorph.jar

    json-lib中的核心类

    1.   JSONObject; --> 把java对象转换为json格式的对象: { }
    2.   JSONArray; -->  把java的集合/数组对象转换为json格式数组: [ ]

    代码:

    //JSONObject类本身是一个Map,所以学习它很方便。    
            JSONObject jo = new JSONObject();
            jo.put("name", "zhangSan");
            jo.put("age", "18");
            jo.put("sex", "male");
            System.out.println(jo.toString());
    
            Person person = new Person("liSi", 18, "female");
            JSONObject jo = JSONObject.fromObject(person);
            System.out.println(jo.toString());
    
            Map map = new HashMap();
            map.put("name", "wangWu");
            map.put("age", "81");
            map.put("sex", "male");
            JSONObject jo = JSONObject.fromObject(map);
            System.out.println(jo.toString());
    //JSONArray本身是一个List,所以使用起来很方便。
            JSONArray ja = new JSONArray();
            Person p1 = new Person("zhangSan", 18, "male");
            Person p2 = new Person("liSi", 23, "female");
            ja.add(p1);
            ja.add(p2);
            System.out.println(ja.toString());
    
            Person p1 = new Person("zhangSan", 18, "male");
            Person p2 = new Person("liSi", 23, "female");
            List<Person> list = new ArrayList<Person>();
            list.add(p1);
            list.add(p2);
            JSONArray ja = JSONArray.fromObject(list);
            System.out.println(ja.toString());
    
            Person p1 = new Person("zhangSan", 18, "male");
            Person p2 = new Person("liSi", 23, "female");
            Person[] persons = {p1, p2};
            JSONArray ja = JSONArray.fromObject(persons);
            System.out.println(ja.toString());

    json的ajax:$.getJSON()

      $.getJSON(url,data,success(result,status,xhr));

     $.getJSON("/ajax01/DServlet",function(rs){
        alert(rs.birthday);
    }); 

    如果json 对象/数组中有日期类型

    在servlet中进行json_lib的配置

      User user = new User("李四","男",new Date());
       //进行json_lib的配置,一定写在fromObject() 之前
       //第一步.创建配置类  Jsonconfig
       sonConfig config = new  JsonConfig();
       //第二步: 在配置类注册转换器, 对那种数据类型进行转换
       config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
            
       // 转换为json
       JSONObject jsonObject = JSONObject.fromObject(user,config);
       response.getWriter().print(jsonObject.toString());

    创建DateJsonValueProcessor工具类,底层实现 SimpleDateFormat

    /**
     * 自定义的转换器类, 必须实现JsonValueProcessor接口
     *   把Date类型 转换为 yyyy-MM-dd的字符串,  SimpleDateFormat
     * @author Administrator
     *
     */
    public class DateJsonValueProcessor implements JsonValueProcessor {
        //转换的格式
        private  String  format="yyyy-MM-dd";
        
        public DateJsonValueProcessor(String format) {
            super();
            this.format = format;
        }
        
        public DateJsonValueProcessor() {
            super();
        }
    
        //JSONArray来调用
        @Override
        public Object processArrayValue(Object paramObject,
                JsonConfig paramJsonConfig) {
            return process(paramObject);
        }
    
        //JSONObject来调用
        @Override
        public Object processObjectValue(String paramString, Object paramObject,
                JsonConfig paramJsonConfig) {
            return  process(paramObject);
        }
    
        private Object process(Object value){
            if(value instanceof Date){
                SimpleDateFormat sdf = new  SimpleDateFormat(format);
                return sdf.format(value);
            }
            //throw new RuntimeException(value+"不是java.util.Date类型");
            return value==null?"":value.toString();
        }
    
    }
  • 相关阅读:
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---37
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---36
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---35
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---34
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---33
    scrollBarStyle- listview滑动条调整
    mk-编译信息的意义
    values-dimen 不同分辨率资源实现引用
    ubuntu-虚拟机分辨率设定
    vmware-虚拟机播放器的下载、安装
  • 原文地址:https://www.cnblogs.com/64Byte/p/12939686.html
Copyright © 2011-2022 走看看