Java——Json语法介绍与使用(详细介绍)

JSON

1. json基本语法

目标

  • 了解json的作用
  • 掌握json的基本语法

分析

  1. 了解json的作用
  2. 定义和解析json数据

讲解

复习xml的作用:

  • 作为配置文件
  • 存储数据
  • 作为数据传输的格式
json介绍
  • 介绍:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
  • 作用:
    • 也可以存储数据,但是没有数据库强大、没有数据库方便。所以存数据还用数据库
    • 也可以作为软件的配置文件,我们开发的程序里很少使用json作为配置文件
    • 作为数据传输的格式:使用非常普遍
json的定义与解析
语法
  • 定义json:
    • 对象形式:{"key":value, "key":value, ....}
    • 数组形式:[v1, v2, v3,...]
    • 混合形式:以上两种形式可以任意混合
  • 解析json:
    • 从对象里取某key的值:json对象.key
    • 从数组里取某索引的值:json数组[索引]
练习
  • 对象形式
let obj = {"name":"三丰", "age":100};
let v = obj.name;

alert(v);
  • 数组混合
let girls = [
    {"name":"柳喲", "age":18, "addr":"北京"},
    {"name":"热巴", "age":19, "addr":"新疆"},
    {"name":"圆圆", "age":30, "addr":"天津"}
];

let v = girls[2].name;

alert(v);

题目

1. 根据以下代码,判断哪个json解析正确:AC
let wulin = {
    "first":"黑马",
    "wudang":[
        {"first" : "张" , "last" : "三丰"},
        {"first" : "张" , "last" : "翠山"}
    ],
    "emei":[
        {"first" : "周" , "last" : "芷若"},
        {"first" : "丁" , "last" : "敏君"}
    ]
}

A: 解析获取黑马:wulin.first

B: 解析获取芷若:wulin.emei.last 错误。正确的应该是:wulin.emei[0].last

C: 解析获取三丰:wulin.wudang[0].last

D: 解析获取三丰:wulin.wudang[1].last

2. 判断以下json格式正确的是:ABD

A: {"first":"黑马", "last":"白马"}

B: {"first":"黑马", "last":[ {"first":"白", "last":"马"}] }

C: {{"first":"黑", "last":"马"}, {"first":"白", "last":"马"}}

D: [{"first":"张", "last":"三丰"}, {"first":"张", "last":"翠山"}]

2. json转换工具

目标

  • 掌握jackson的使用

分析

客户端和服务端之间使用Ajax交互时,服务端使用JavaBean存储数据,客户端使用json存储数据。这就需要我们掌握JavaBean对象和json格式之间的转换:

  • 服务端把JavaBean对象里的数据,转换成json格式的字符串,返回给客户端
  • 客户端把json格式的字符串提交到服务端,服务端接收到之后,要能够转换成JavaBean对象

常用的转换工具有:

  • jsonlib:jdk社区提供的工具,用的很少
  • gson:google提供的工具,使用比较普遍
  • jackson:SpringMVC框架内置的转换工具,使用非常普遍
  • fastjson:Alibaba提供的转换工具,国内使用相对较多

我们要求掌握:jackson

讲解

导入jackson的jar包

把以下三个包,导入到web项目里:web\WEB-INF\lib,之后 Add as Library

在这里插入图片描述

Jackson的常用API

Jackson工具包提供了一个核心类:ObjectMapper,这个对象提供了JavaBean和json之间转换的常用方法:

方法 说明
ObjectMapper() 无参构造方法
writeValueAsString(Object obj) 把JavaBean对象转换成json格式的字符串
readValue(String json, Class clazz) 把json格式字符串,还原成指定类型的JavaBean对象
readValue(InputStream is, Class clazz) 从输入流中读取json数据,还原成指定类型的JavaBean
Jackson的使用示例
准备一个JavaBean
package com.jackson;


public class User {
    private String name;
    private String sex;
    private Integer age;

    public User() {
    }

    public User(String name, String sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    //get/set 和 toString方法 省略....
}
转换示例
package com.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DemoJackson {

    /**
     * Java转换成json
     */
    @Test
    public void test1() throws JsonProcessingException {
        User user1 = new User("tom", "男", 20);
        User user2 = new User("jerry", "女", 19);

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);

        Map<String, User> userMap = new HashMap<>();
        userMap.put("u1", user1);
        userMap.put("u2", user2);

        //1. 把一个User对象的数据,转换成json格式的字符串
        //   {"name":"tom","sex":"男","age":20}
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(user1);
        System.out.println(json);

        //2. 把一个List数据,转换成json格式的字符串
        //   [{"name":"tom","sex":"男","age":20},{"name":"jerry","sex":"女","age":19}]
        json = mapper.writeValueAsString(userList);
        System.out.println(json);

        //3. 把一个Map数据,转换成json格式的字符串
        //   {"u1":{"name":"tom","sex":"男","age":20},"u2":{"name":"jerry","sex":"女","age":19}}
        json = mapper.writeValueAsString(userMap);
        System.out.println(json);
    }

    /**
     * 把json字符串还原成Java对象
     */
    @Test
    public void test2() throws IOException {
        String json = "{\"name\":\"tom\",\"sex\":\"男\",\"age\":20}";

        //json对象形式 还原成JavaBean
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user);
        //json对象形式 还原成Map
        Map map = mapper.readValue(json, Map.class);
        System.out.println(map.get("name"));


        //复杂json数组格式,还原成List(默认不带泛型是List,不能还原成List
        json = "[{\"name\":\"tom\",\"sex\":\"男\",\"age\":20},{\"name\":\"jerry\",\"sex\":\"女\",\"age\":19}]";
        List list = mapper.readValue(json, List.class);
        System.out.println(list.get(0));
    }

}

总结

  • json是什么:是一种数据格式
    • 可以作为配置文件
    • 可以存储数据
    • 可以作为数据传输的格式
  • json语法
    • 定义json:
      • 对象形式:{"key":value, "key":value, }
      • 数组形式:[v1, v2, v3...]
      • 混合形式:以上两种形式可以任意混合
    • 解析json:
      • 获取对象里的key值:json对象.key
      • 获取数组里索引i的值:json数组[i]
  • json转换:Jackson
ObjectMapper mapper = new ObjectMapper();

//1. 把Java对象转换成json
String json = mapper.writeValueAsString(Object obj);

//2. 把json还原成Java对象
mapper.readValue(String json, Class clazz);

你可能感兴趣的:(Java,java,json,javascript)