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

 

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

posted @ 2018-01-01 19:13  程序员小川  阅读(1823)  评论(1编辑  收藏  举报