json

json轻量数据格式
基本上所有的类型都可以通过json来表示

json数据格式

如下:

  1. 数组的json表示形式
 @GetMapping("arrays")
    public int[] arraysToJson(){
        //定义数组
        int[] a={1,2,3,4,5,6,7,8,9};
        return a;
    }

在这里插入图片描述
2. list的json表示形式

 @GetMapping("list")
    public List list(){
        //定义list
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        return list;
    }

在这里插入图片描述
3. 对象的json表现形式

 @GetMapping("student")
    public Student student(){
        Student students = new Student();
        students.setAge(10);
        students.setName("小明");
        return students;
    }

在这里插入图片描述
4. map的json表现形式

@GetMapping("mapp")
    public Map map(){
        Map map = new HashMap();
        map.put("年龄","23");
        map.put("姓名","张三");
        return map;
    }

在这里插入图片描述
由以上可以看出,单列(数组和list)数据的json形式都是用中括号括起来的,双列的键值对(对象,map)都是用花括号括起来的,键有引号引起来,键和值之间用冒号隔开,每一对键值对用逗号隔开;

  1. 接下来是一个花括号和中括号的混合,可以更好的理解json
 @GetMapping("map111")
    public Map map11() {
        Map<String, Object> map = new HashMap<>();
        map.put("学生1", new Student("学生1姓名", 23));
        map.put("学生2", new Student("学生2姓名", 45));

        List<Object> list = new ArrayList<>();
        list.add("list第1个元素");
        list.add("list第2个元素");
        list.add("list第3个元素");
        list.add("list第4个元素");

        int arr[] = {1, 2, 3, 4, 5};
        list.add(arr);

        Map<String, String> map1 = new HashMap<>();
        map1.put("第二个集合1", "第二个集合的第一个元素");
        map1.put("第二个集合2", "第二个集合的第二个元素");

        list.add(map1);
        map.put("list", list);
        return map;
    }

首先定义一个map,往map里面添加两个学生对象,再创建一个list,list里面添加几个元素,再创建一个数组,将数组放入到list中去,再创建一个map1,将map1放入到list中去,然后将list放入map;

{
    "学生2": {
        "name": "学生2姓名",
        "age": 45
    },
    "list": [
        "list第1个元素",
        "list第2个元素",
        "list第3个元素",
        "list第4个元素",
        [
            1,
            2,
            3,
            4,
            5
        ],
        {
            "第二个集合2": "第二个集合的第二个元素",
            "第二个集合1": "第二个集合的第一个元素"
        }
    ],
    "学生1": {
        "name": "学生1姓名",
        "age": 23
    }
}
  • 最外层的花括号是map的,放在map里面的全都是键值对;
  • map里的第一个键值对是学生2和学生2对象;学生2对象也是以键值对的形式存在,所以它也是花括号;
  • map里的第二个键值对是list和list对象;list对象是单列的,所以中括号;list里面的前四个元素是一般元素;第五个元素是数组,因为数组也是单列,所以数组也是中括号;第六个元素是map2,map2是键值对,所以是花括号;
  • map里的第三个键值对是学生1和学生1对象;学生1对象也是以键值对的形式存在,所以它也是花括号;

以上就是json的数据格式;

json和其它格式相互转换

  1. 首先是json和键值对类型(也就是花括号之间的转换)
  • Java对象和json的幻想转换
public static void main(String[] args) {
        //json和对象的相互转换
        //先创建一个java对象并赋值
        Student student = new Student();
        student.setName("北京");
        student.setAge(12);
        System.out.println("未转换json之前的student#######"+student);//未转换json之前的student#######Student(name=北京, age=12)
        //将java对象转换为json字符串
        String s = JSON.toJSONString(student);
        System.out.println("student的json字符串###########"+s);//student的json字符串###########{"age":12,"name":"北京"}
        //将json字符串转为json对象
        JSONObject jsonObject = JSON.parseObject(s);
        System.out.println("student的json对象###########"+jsonObject);//student的json对象###########{"name":"北京","age":12}
        //将json字符串转为Java对象
        Student student1 = JSON.parseObject(s, Student.class);
        System.out.println("转换json之后的student#######"+student1);//转换json之后的student#######Student(name=北京, age=12)
}
  • java对象可以通过JSON.toJSONString()方法转换为json字符串;
  • json字符串可以通过JSON.parseObject()方法转换为json对象;
  • json字符串可以通过JSON.parseObject()方法转换为Java对象;
  1. json和单列集合的转换(也就是中括号)
  • list和json的相互转换
public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        //list转为json字符串
        String s3 = JSON.toJSONString(list);
        //json字符串转为json对象
        JSONArray objects = JSON.parseArray(s3);
        //json字符串转为list
        List lists = JSON.parseObject(s3,List.class);
        System.out.println(lists);
    }
  • list可以通过JSON.toJSONString()方法转换为json字符串;
  • json字符串可以通过JSON.parseArray()方法转换为json对象;
  • json字符串可以通过JSON.parseObject()方法转换为list对象;

由上面json和键值对以及list的相互转换可以得出:

  • 当json字符串为花括号时,转换为json对象需要用JSON.parseObject()方法;
  • 当json字符串为中括号时,转换为json对象需要用JSON.parseArray()方法;

然后可以对复杂一点的json进行解析;

    [
        {
            "districtid": 110000,
            "name": "北京市",
            "pid": 0,
            "level": 1,
            "son": [
                {
                    "districtid": 110100,
                    "name": "市辖区",
                    "pid": 110000,
                    "level": 2,
                    "son": [
                        {
                            "districtid": 110101,
                            "name": "东城区",
                            "pid": 110100,
                            "level": 3,                     
                        },
                        {
                            "districtid": 110119,
                            "name": "延庆区",
                            "pid": 110100,
                            "level": 3,
                        }
                    ]
                }
            ],
            "abridge_name": "北京"
        },
        {
            "districtid": 120000,
            "name": "天津市",
            "pid": 0,
            "level": 1,
            "son": [
                {
                    "districtid": 120100,
                    "name": "市辖区",
                    "pid": 120000,
                    "level": 2,
                    "son": [
                        
                        {
                            "districtid": 120113,
                            "name": "北辰区",
                            "pid": 120100,
                            "level": 3,
                            "son": []
                        },
                        {
                            "districtid": 120114,
                            "name": "武清区",
                            "pid": 120100,
                            "level": 3,
                            "son": []
                        }
                    ]
                }
            ],
            "abridge_name": "天津"
        }
		]

开始分析这个json;

  1. 当拿到这个json字符串之后,发现它的最外层是中括号,所以我们需要用JSON.parseArray()将它转为一个json对象;
  2. 最外层的中括号里面是两个花括号,可以遍历循环拿到每一个花括号,然后通过JSON.parseObject()将每一个花括号转换为json对象;
  3. 以此类推,碰到中括号用JSON.parseArray(),碰到花括号用JSON.parseObject();

代码如下:

public void import1() {
        //读取文件
        InputStream inputStream = this.getClass().getResourceAsStream("/static/city.json");
        String string = "";
        StringBuilder sb = new StringBuilder();
        if (inputStream == null) {
            throw new RuntimeException("读取json文件失败");
        } else {
            try {
                String line;
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                    System.out.println(string);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //json从这里开始
            string = sb.toString();
            //将拿到的json字符串转为json对象,因为json最外层是中括号,所以用JSON.parseArray();
            JSONArray jsonArray = JSON.parseArray(string);
            //JSONArray objects = JSONArray.parseArray(string);//这种方式也可以解析中括号
            for (int i = 0; i < jsonArray.size(); i++) {
                //因为最外层的中括号里面是花括号,现在拿到了每一个花括号,所以用getJSONObject解析;
                //意思就是下一步返回的是中括号就用getJSONArray(),若是花括号就用getJSONObject();
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                //得到花括号里键为son的中括号
                JSONArray son = jsonObject.getJSONArray("son");
                for (int s = 0; s < son.size(); s++) {
                    JSONObject jsonObject1 = son.getJSONObject(s);

                    for (int a = 0; a < jsonObject1.size(); a++) {
                        JSONArray son1 = jsonObject1.getJSONArray("son");

                        for (int q = 0; q < son1.size(); q++) {
                            JSONObject jsonObject2 = son1.getJSONObject(q);
                            //最终用get获取
                            Object name = jsonObject2.get("name");
                            JSONArray array = jsonObject2.getJSONArray("array");
                            for (int x = 0; x < array.size(); x++) {
                                Object o = array.get(x);
                                //最终用get获取
                                System.out.println(o);
                            }
                            System.out.println(name);
                        }
                    }
                }
            }
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值