• json小结和fastjson包的实际json操作


    工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是json,今天就来聊一聊json,主要分析json数据和java Bean之间的转换问题。

    一、json是什么

    json,全称是JavaScript Object Notation,中文翻译是JS对象标记语言,是一种轻量级的数据交换格式,易于开发人员编写和阅读,也易于机器进行生成和解析。

    二、json数据结构

    1、可以存储对象(Object),使用花括号 { } 包含的键值对结构,key必须是string类型,value为任何基本类型或数据结构。

    2、可以存储数组(Array),使用中括号 [ ] 来起始,并用逗号 , 来分割元素。

    3、可以存储String类型、number类型(整型、浮点型)、Boolean类型(true、false)和null(使用null时可以先定义一个Object为null)。

    三、语法

    1、普通键值对。

    {"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false}

    2、存储对象。

    {"person":{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false}}

    3、存储数组。

    {"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false,"interest":["coding","reading"]}

    4、对象加数组复合。

    {"person":[{"name":"小川94_2号"},{"name":"小川94_3号"}]}

    四、准备工作

    1、开发系统:win7 64位。

    2、开发环境:jdk1.8。

    3、开发语言:java。

    4、开发工具:eclipse。

    5、fastjson的jar包:我使用的是maven的pom.xml文件配置

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

    五、使用阿里的 fastjson 工具包对json进行实际操作

    1、将json字符串转为json对象。

    1     /**
    2      * 将json字符串转为json对象
    3      * @param jsonStr json字符串
    4      * @return
    5      */
    6     public static JSONObject changeStringToJson(String jsonStr){
    7         JSONObject jo = JSON.parseObject(jsonStr);
    8         return jo;
    9     }

    2、将json字符串数组转为json数组对象。

     1     /**
     2      * 将json字符串数组转为json数组对象
     3      * @param jsonStr json字符串
     4      * @return
     5      */
     6     public static JSONArray changeStringToArray(String jsonStr){
     7         JSONObject jo = JSON.parseObject(jsonStr);
     8         if( !jo.containsKey("person") ){
     9             return null;
    10         }
    11         String strArray = jo.getString("person");
    12         JSONArray ja = JSONArray.parseArray(strArray);
    13         return ja;
    14     }

    3、将json字符串转为java Bean对象。

    1     /**
    2      * 将json字符串转为java Bean对象
    3      * @param jsonStr json字符串
    4      * @return
    5      */
    6     public static Person changeJsonToBean(String jsonStr){
    7         Person person = JSON.parseObject(jsonStr, Person.class);
    8         return person;
    9     }

    4、将java Bean对象转为json对象。

    1     /**
    2      * 将java Bean对象转为json对象
    3      * @param person java Bean对象
    4      * @return
    5      */
    6     public static JSONObject changeBeanToJson(Person person){
    7         JSONObject jo = (JSONObject)JSON.toJSON(person);
    8         return jo;
    9     }

    5、将json字符串转为Map。

     1     /**
     2      * 将json字符串转为Map
     3      * @param jsonStr json字符串
     4      * @return
     5      */
     6     public static Map<String,Object> changeJsonToMap(String jsonStr){
     7         Map<String,Object> map = new HashMap<String,Object>();
     8         JSONObject jo = JSON.parseObject(jsonStr);
     9         for(String str : jo.keySet()){
    10             map.put(str, jo.get(str));
    11         }
    12         return map;
    13     }

    6、编写测试类。

        protected long startTime;
        protected long endTime;
        
        public static final String JSON_TO_BEAN = "{"
                + "'name':'小川94',"
                + "'age':18,"
                + "'gender':'boy',"
                + "'hasGirlFriend':false,"
                + "'interest':'coding'"
                + "}";
        
        public static String str = "{"person":{"
                + ""name":"小川94","age":18,"gender":"boy","
                + ""hasGirlFriend":false,"interest":"coding"}}";
        
        public static String strArray = "{"person":["
                + "{"name":"小川94_2号"},{"name":"小川94_3号"}]}";
        
        @Before
        public void setUp() throws Exception {
            this.startTime= System.currentTimeMillis();
            System.out.println("=========开始测试===========");
        }
        
        @After
        public void tearDown() throws Exception {
            this.endTime = System.currentTimeMillis();
            System.out.println("测试用时:"+(endTime-startTime));
            System.out.println("=========测试结束===========");
        }
        
        @Test
        public void testChangePersonToBean(){
            Person person = JsonUtils.changeJsonToBean(JSON_TO_BEAN);
            System.out.println(person);
            System.out.println("姓名:"+person.getName());
            System.out.println("年龄:"+person.getAge());
            System.out.println("性别:"+person.getGender());
        }
        
        @Test
        public void testChangeBeanToJson(){
            Person person = new Person();
            person.setName("小川94");
            person.setAge(18);
            person.setGender("boy");
            person.setHasGirlFriend(false);
            person.setInterest("coding");
            JSONObject jo = JsonUtils.changeBeanToJson(person);
            System.out.println(jo);
        }
        
        @Test
        public void testChageJsonToMap(){
            Map<String,Object> map = JsonUtils.changeJsonToMap(JSON_TO_BEAN);
            System.out.println(map);
        }
        
        @Test
        public void testChangeStringToJson(){
            JSONObject jo = JsonUtils.changeStringToJson(str);
            System.out.println(jo);
        }
        
        @Test
        public void testChangeStringToArray(){
            JSONArray ja = JsonUtils.changeStringToArray(strArray);
            System.out.println(ja);
            System.out.println(ja.get(0));
        }

    7、运行结果:上面五个测试用例都可以正常编译、运行,这里就不一一截图说明了。

    文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!本博文为本人原创,转载请注明出处!

  • 相关阅读:
    关于JS动态切换样式表
    关于header()函数重定向的问题
    微信团队讲课笔记 Android 开发(二)UI设计
    Effective C++ 笔记:4设计与声明
    某面试算法题_最短时间找出十包粉末中的两蓝粉末。
    VS2015 配置opengl的一些库
    URAL 1225 Flags 简单DP,一重循环
    POJ 1384 Piggy-Bank 完全背包分析
    POJ 1651 Multiplication Puzzle DP 类似矩阵链
    URAL 1183 Brackets Sequence DP 路径输出
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/8168576.html
Copyright © 2020-2023  润新知