目 录CONTENT

文章目录

关于json

在水一方
2021-12-06 / 0 评论 / 0 点赞 / 195 阅读 / 2,774 字 / 正在检测是否收录...

关于json

JSON是轻量级的文本数据交换格式

中文官网:

http://www.json.org.cn/

JSON 使用

JSON经常应用到的场景是:在后台应用程序中将响应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。

一个简单的 JSON 对象语法:

{ "name":"w3cschool", "alexa":8000, "site":null }

JSON 对象使用在大括号({})中书写,数组使用[]来表示,对象可以包含多个 key/value(键/值)对。其中:

  • key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
  • key 和 value 中使用冒号(:)分割。
  • 每个 key/value 对使用逗号(,)分割。

访问对象值

var myObj, x;
myObj = { "name":"w3cschool", "alexa":8000, "site":null };
x = myObj.name;

工具站点

实际开发中有时会需要将复杂的json数据转为java对象进行封装,可以使用一个比较使用的json工具,网址为:
https://www.json.cn/json/json2java.html
json格式化网址:https://www.bejson.com/

Java中的json

Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库:

  • Gson: 谷歌开发的 JSON 库,功能十分全面。
  • FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
  • Jackson: 社区十分活跃且更新速度很快

SpringBoot使用Jackson作为默认Json解析器,当需要返回前端Json形式数据时使用Jackson将对象转化为Json数据格式返回当我们返回前端数据带有Date数据类型时,@JsonFormat注解很方便将日期转化为我们想要的数据格式返回

示例:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createDate;

jackson将对象转为json字符串的方法

 @Test
    public void tranferObjectToJson() throws JsonProcessingException {
        User user = new User();
        ObjectMapper objectMapper = new ObjectMapper();
        String str = objectMapper.writeValueAsString(user);
        System.out.println(str);
       
    }

Java的String字符串转为对象(注意这里的转义字符)
image.png

spring中通常在Controller层加上@ResponseBody注解就会自动返回json数据

JsonFormat注解是jackson包里面的一个注解,因此在使用的时候需要引入
fasterxml maven的jar包,如下所示。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
</dependency>

引入fasterxml maven jar包之后,就可以在实体类属性上面使用@JsonFormat注解了,要注意的是,它只会在类似@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,你直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。

json工具类


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectMapperUtil {
    private static final ObjectMapper mapper = new ObjectMapper();

    // 将对象转化为json字符串
    public static String  toJSON(Object obj) {
        String json=null;
        try {

            json = mapper.writeValueAsString(obj);

        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return json;
    }


    public static  <T> T toObject(String json, Class<T> target ) {
        T t = null;
        try {
            t=mapper.readValue(json.getBytes(),target);
        } catch (Exception e) {
            // TODO: handle exception
        }
        return t;
    }



}

json测试

list中放String

{
	"list": ["123","32","gfd","tyr"],
	"name": "zhangsan"
}

List中存放对象的json 表示mea对象中只有一个name属性

{
	"mea": [{"name":"张三"},{"name":"wangwu"}],
	"name": "zhangsan"
}

json和fastjson

提供服务器端、安卓客户端两种解析工具,性能表现较好,也是目前企业开发中用的比较多的,但是fastjson之前也爆出过一些安全漏洞,见网址:https://github.com/alibaba/fastjson/wiki/security_update_20170315

image.png

实际使用时需要注意用的版本

0

评论区