Jackson以及fastjson的使用

JSON(JavaScript Object Notation) 是 JavaScript 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。JSON 主要用于数据在前后端的传输,后端将JavaBean对象转化为Json字符串,前端将Json字符串转化为JS对象,尤其应用于AJAX异步请求。

前端JSON工具由JS自带

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>json</title>
</head>
<body>

<script type="text/javascript">
    //编写一个js的对象
    let person = {
        name: "小红",
        age: 2,
        sex: "男"
    };
    //将js对象转换成json字符串
    let json_str = JSON.stringify(person);

    //将json字符串转换为js对象
    let js_str = JSON.parse(json_str);
</script>
</body>
</html>

在这里插入图片描述


后端也需要解析工具,Jackson和fastjson是主流工具。

Jackson

maven依赖

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

创建pojo

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
}

编写Controller返回给前端一个Json字符串

/*
@RestController
方法不通过视图解析器,而是直接传递数据
通常用于前后端分离的数据传输

还有另一种方式时
@Controller和@Response的组合实现同样的效果
 */
@RestController
public class HelloJsonController {

    @RequestMapping("/json")
    public String json() throws JsonProcessingException {
        //创建Jackson对象映射器,解析数据
        ObjectMapper mapper = new ObjectMapper();
        //创建实体对象
        List<User> users = new LinkedList<User>();
        users.add(new User("小红", 20, "女"));
        users.add(new User("小马", 10, "男"));
        //利用对象映射器解析实体对象
        String json_str = mapper.writeValueAsString(users);
        return json_str;
    }
}

在这里插入图片描述

解决json字符串的乱码问题
@RequestMaping的produces属性来实现,修改下代码

//produces:指定响应体返回类型和编码
@RequestMapping(value = “/json”,produces =“application/json;charset=utf-8”)

在springmvc的配置文件上添加StringHttpMessageConverter消息转换配置!

<mvc:annotation-driven>
   <mvc:message-converters register-defaults="true">
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
           <constructor-arg value="UTF-8"/>
       </bean>
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
           <property name="objectMapper">
               <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                   <property name="failOnEmptyBeans" value="false"/>
               </bean>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

fastjson

maven依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

fastjson中除了常规的Json字符串和JavaBean对象
还存在Json对象(JSONObject)和Json数组(JSONArray)
看源码可以知道,JSONObject是一个Map,JSONArray是一个list

   @Test
    public void json() throws JsonProcessingException {
        //创建实体对象
        List<User> users = new LinkedList<User>();
        users.add(new User("小红", 20, "女"));
        users.add(new User("小马", 10, "男"));

        //Javabean转Json字符串
        String str1 = JSON.toJSONString(users);
        String str2 = JSON.toJSONString(new User("小红", 20, "女"));
        //Json字符串转JavaBean
        List<User> list = JSON.parseArray(str1, User.class);
        User user = JSON.parseObject(str2, User.class);


        //JavaBean转Json对象
        JSONObject jsonObject = (JSONObject) JSON.toJSON(user);
        JSONArray jsonArray = (JSONArray) JSON.toJSON(list);
        //Json对象转JavaBean
        user = JSON.toJavaObject(jsonObject, User.class);

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JacksonFastjson都是Java中常用的JSON处理库,用于在Java对象和JSON字符串之间进行转换。它们的主要区别在于以下几个方面: 1. 性能:在性能方面,Fastjson通常被认为是更快的库。Fastjson具有较高的解析和序列化速度,特别是对于大型JSON数据或复杂对象的处理。Jackson也具有良好的性能,但在某些情况下,Fastjson可能会更快。 2. 注解支持:JacksonFastjson都支持使用注解来定制JSON序列化和反序列化的行为。Jackson使用`@JsonProperty`、`@JsonSerialize`等注解,而Fastjson使用`@JSONField`注解。两者的注解支持相似,但具体的注解名称和用法有所不同。 3. API设计:Jackson的API设计较为复杂,提供了更多的灵活性和可定制性。它使用了一系列的`ObjectMapper`、`JsonNode`等类来处理JSON数据。相比之下,Fastjson的API设计相对简单,使用起来更加直观和方便。 4. 第三方框架集成:由于Jackson是Java领域中使用最广泛的JSON库之一,许多框架和库都对其进行了集成支持。在某些情况下,一些第三方库可能更喜欢或更适配于JacksonFastjson在这方面的支持相对较少,但也有一些框架对其提供了支持。 总的来说,JacksonFastjson都是优秀的JSON处理库,选择哪个库取决于项目的具体需求和性能要求。如果对性能要求较高且需要更多的定制化能力,可以考虑使用Fastjson。如果项目已经集成了许多基于Jackson的库或框架,或者需要更大的生态系统支持,那么使用Jackson可能更为方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值