• 如何解析json格式的字符串


    package com.json;
     
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
     
    public class JsonTest {
        // 解析json(最复杂的解析方法)
        public static void jieXIJSON() {
            String jsonStr = "{"errorCode":"0","errorMsg" :"调用接口成功","data":[{"username":"张文哲","position":"student"}]}";//为了避免二义性,字符串里面的双印号使用了转义字符
            JSONObject root = new JSONObject().parseObject(jsonStr);// 将json格式的字符串转换成json
            
            String errorCode = root.getString("errorCode");//定义一个字符串,其值为根据json对象中的数据名解析出的其所对应的值
            String errorMsg = root.getString("errorMsg");
            System.out.println("errorCode=" + errorCode + ";errorMsg=" + errorMsg);
            
            JSONArray dataArr = root.getJSONArray("data");//根据json对象中数组的名字解析出其所对应的值
            System.out.println(dataArr);
            
            //对解析出的数组进行遍历
            for (int i = 0; i < dataArr.size(); i++) {
                JSONObject dataBean = (JSONObject) dataArr.get(i);//得到数组中对应下标对应的json对象
                
                String username = dataBean.getString("username");//根据json对象中的数据名解析出相应数据
                String position = dataBean.getString("position");
                
                System.out.println(username);//打印输出
                System.out.println(position);
            }
        }
     
        public static void main(String[] args) {
            jieXIJSON(); 
        }
    }

    其打印输出结果为:

     

    errorCode=0;errorMsg=调用接口成功

    [{"position":"student","username":"张文哲"}]

    张文哲

    student

    以上这种解析json对象的方法较为麻烦,代码较多且复杂。可以利用java的反射机制通过把json对象解析成实体类对象的方式来解析json

     

    首先这里有两个实体类:

     

    package com.json;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class RootEntity {
        private String errorCode;
        private String errorMsg;
        private List<UserEntity> data;
        public String getErrorCode() {
            return errorCode;
        }
        public void setErrorCode(String errorCode) {
            this.errorCode = errorCode;
        }
        public String getErrorMsg() {
            return errorMsg;
        }
        public void setErrorMsg(String errorMsg) {
            this.errorMsg = errorMsg;
        }
        public List<UserEntity> getData() {
            return data;
        }
        public void setData(List<UserEntity> data) {
            this.data = data;
        }
    }

     

    package com.json;
     
    public class UserEntity {
        private String username;
        private String position;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPosition() {
            return position;
        }
        public void setPosition(String position) {
            this.position = position;
        }
    }

    解析json字符串的代码:

    package com.json;
     
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
     
    public class JsonTest {
     
        // 解析json(简单的解析方法,也就是通过json转实体类)
        public static void jsonToBean() {
            String jsonStr = "{"errorCode":"0","errorMsg" :"调用接口成功","data":[{"username":"张文哲","position":"student"}]}";
            RootEntity rootEntity = new JSONObject().parseObject(jsonStr,RootEntity.class);//将json字符串转换成json对象,并通过java的反射机制创建相应的实例
            
            System.out.println(rootEntity.getErrorCode());
            System.out.println(rootEntity.getErrorMsg());
            System.out.println(rootEntity.getData());
        }
     
        public static void main(String[] args) {
            jsonToBean();
        }
    }

    其运行结果如下:

     

    0

    调用接口成功

    [com.json.UserEntity@3f78807]

    但是使用这种方法解析json字符串时一定要注意:

     

             所对应的类的属性名称和json数据格式中的数据属性名称一定要保持一致(原因:其使用了java反射机制)

     

  • 相关阅读:
    为什么不应该使用ZooKeeper做服务发现
    Python 练习 人事管理
    Python 爬取 妹子图(技术是无罪的)
    Python 爬取 书籍
    Python 爬取 豆瓣
    Python 爬取 房天下
    Python 爬取 煎蛋
    Python 爬取 拉钩
    Python 爬取 猫眼
    家具专区网
  • 原文地址:https://www.cnblogs.com/lvchengda/p/12604174.html
Copyright © 2020-2023  润新知