zoukankan      html  css  js  c++  java
  • JSON和fastjson

    一、JSON

    语法规则:

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    名称/值对-->对象-->数组

     

    JSON 名称/值对

    JSON 数据的书写格式是:名称/值对。

    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

    "firstName" : "John"

    JSON 值可以是:

    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null


    JSON 对象

    JSON 对象在花括号中书写:

    对象可以包含多个名称/值对:

    { "firstName":"John" , "lastName":"Doe" }

    JSON 数组

    JSON 数组在方括号中书写:

    数组可包含多个对象:

    {
    "employees": [
    { "firstName":"John" , "lastName":"Doe" },
    { "firstName":"Anna" , "lastName":"Smith" },
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
    }

    在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

    二、fastjson

    Fastjson是一个Java语言编写的高性能功能完善的JSON库。

      <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.51</version>
       </dependency>

    序列化API

    package com.alibaba.fastjson;
    
    public abstract class JSON {
        // 将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBean
        public static String toJSONString(Object object, SerializerFeature... features);
    
        // 将Java对象序列化为JSON字符串,返回JSON字符串的utf-8 bytes
        public static byte[] toJSONBytes(Object object, SerializerFeature... features);
    
        // 将Java对象序列化为JSON字符串,写入到Writer中
        public static void writeJSONString(Writer writer, 
                                           Object object, 
                                           SerializerFeature... features);
    
        // 将Java对象序列化为JSON字符串,按UTF-8编码写入到OutputStream中
        public static final int writeJSONString(OutputStream os, // 
                                                Object object, // 
                                                SerializerFeature... features);
    
    }

    JSON字符串反序列化API

    package com.alibaba.fastjson;
    
    public abstract class JSON {
        // 将JSON字符串反序列化为JavaBean
        public static <T> T parseObject(String jsonStr, 
                                        Class<T> clazz, 
                                        Feature... features);
    
        // 将JSON字符串反序列化为JavaBean
        public static <T> T parseObject(byte[] jsonBytes,  // UTF-8格式的JSON字符串
                                        Class<T> clazz, 
                                        Feature... features);
    
        // 将JSON字符串反序列化为泛型类型的JavaBean
        public static <T> T parseObject(String text, 
                                        TypeReference<T> type, 
                                        Feature... features);
    
        // 将JSON字符串反序列为JSONObject
        public static JSONObject parseObject(String text);
    }

    Demo

    parse Tree

    import com.alibaba.fastjson.*;
    
    JSONObject jsonObj = JSON.parseObject(jsonStr);

    parse POJO

    import com.alibaba.fastjson.JSON;
    
    Model model = JSON.parseObject(jsonStr, Model.class);

    parse POJO Generic

    import com.alibaba.fastjson.JSON;
    
    Type type = new TypeReference<List<Model>>() {}.getType(); 
    List<Model> list = JSON.parseObject(jsonStr, type);

    convert POJO to json string

    import com.alibaba.fastjson.JSON;
    
    Model model = ...; 
    String jsonStr = JSON.toJSONString(model);

    convert POJO to json bytes

    import com.alibaba.fastjson.JSON;
    
    Model model = ...; 
    byte[] jsonBytes = JSON.toJSONBytes(model);

    write POJO as json string to OutputStream

    import com.alibaba.fastjson.JSON;
    
    Model model = ...; 
    OutputStream os;
    JSON.writeJSONString(os, model);

    write POJO as json string to Writer

    import com.alibaba.fastjson.JSON;
    
    Model model = ...; 
    Writer writer = ...;
    JSON.writeJSONString(writer, model);

    JsonObject用法

    1.put(String key, Object value)方法,在JSONObject对象中设置键值对在,在进行设值得时候,key是唯一的,如果用相同的key不断设值得时候,保留后面的值。

    2.Object get(String key) :根据key值获取JSONObject对象中对应的value值,获取到的值是Object类型,需要手动转化为需要的数据类型

    3.int size():获取JSONObject对象中键值对的数量

    4.boolean isEmpty():判断该JSONObject对象是否为空

    5.containsKey(Object key):判断是否有需要的key值

    6.boolean containsValue(Object value):判断是否有需要的value值

    7.JSONObject getJSONObject(String key):如果JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;

    8.JSONArray getJSONArray(String key) :如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;

    9.Object remove(Object key):根据key清除某一个键值对。

    由于JSONObject是一个map,它还具有map特有的两个方法

    10.Set<String> keySet() :获取JSONObject中的key,并将其放入Set集合中

    11.Set<Map.Entry<String, Object>> entrySet():在循环遍历时使用,取得是键和值的映射关系,Entry就是Map接口中的内部接口

    与String字符串转换:

    12.toJSONString() /toString():将JSONObject对象转换为json的字符串

    public static void main(String[] args) {
            //新建JSONObject对象
            JSONObject object1 = new JSONObject();
            
            //1.在JSONObject对象中放入键值对
            object1.put("name", "张三");
            object1.put("name1", "张三1");
            object1.put("name2", "张三2");
            
            //2.根据key获取value
            String name = (String) object1.get("name");
            System.out.println(name);
            
            //3.获取JSONObject中的键值对个数
            int size = object1.size();
            System.out.println(size);
            
            //4.判断是否为空
            boolean result = object1.isEmpty();
            System.out.println(result);
            
            //5.是否包含对应的key值,包含返回true,不包含返回false
            boolean isContainsKeyResult = object1.containsKey("name");
            System.out.println(isContainsKeyResult);
            
            //6.是否包含对应的value值,包含返回true,不包含返回false
            boolean isContainsValueResult = object1.containsValue("王五");
            System.out.println(isContainsValueResult);
            
            //7.JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;
            JSONObject object2 = new JSONObject();
            //将jsonobject对象作为value进行设置
            object2.put("student1", object1);
            JSONObject student =object2.getJSONObject("student1");
            System.out.println(student);
            
            //8.如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;
            JSONObject objectArray = new JSONObject();
            //创建JSONArray数组
            JSONArray jsonArray = new JSONArray();
            //在JSONArray数组设值:jsonArray.add(int index, Object value);
            jsonArray.add(0, "this is a jsonArray value");
            jsonArray.add(1, "another jsonArray value");
            objectArray.put("testArray", jsonArray);
            //获取JSONObject对象中的JSONArray数组
            JSONArray jsonArray2 = objectArray.getJSONArray("testArray");
            System.out.println(jsonArray2);
            
            //9.remove.根据key移除JSONObject对象中的某个键值对
            object1.remove("name");
            System.out.println(object1);
            
            //10.取得JSONObject对象中key的集合
            Set<String> keySet= object1.keySet();
            for (String key : keySet) {
                System.out.print("   "+key);
            }
            System.out.println();
            
            //11.取得JSONObject对象中的键和值的映射关系
            Set<Map.Entry<String, Object>> entrySet = object1.entrySet();
            for (Entry<String, Object> entry : entrySet) {
                System.out.println(entry);
            }
            
            //12.转换为json字符串
            String str1 = object1.toJSONString();
            System.out.println(str1);
            String str2 =object1.toString();
            System.out.println(str2);
        }


    Json的序列化和反序列化
    Json操作


  • 相关阅读:
    浅谈我对几个Web前端开发框架的比较
    国内最火的五款HTML5前端开发框架
    比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
    请问实现MVC的框架有哪些,实现持久化操作的框架有哪些,还有类似于spring整合的框架又有哪些
    Guice与Spring框架的区别
    致Play Framework开发者们的一封信
    有可能挑战Java优势的四种技术
    大家所说的full-stack框架到底是指什么?
    db_table--Spring Security3.1 最新配置实例
    JEECG平台JWT接口文档
  • 原文地址:https://www.cnblogs.com/aidata/p/11603349.html
Copyright © 2011-2022 走看看