首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JSON解析方案及json转Map反序列号,应用于支付回调通知中接收参数

JSON解析方案及json转Map反序列号,应用于支付回调通知中接收参数

作者头像
oktokeep
发布2025-05-29 08:29:12
发布2025-05-29 08:29:12
1700
举报
文章被收录于专栏:第三方工具第三方工具

JSON解析方案及json转Map反序列号,应用于支付回调通知中接收参数

1.使用 Jackson:业界标配 2.使用 Gson:轻量好用 3.使用 FastJSON:高性能

代码语言:javascript
复制
class User {
    @Expose(serialize = true)
    private int id;
    @Expose
    private String name;
    @Expose
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")    //Jackson 日期格式化
    private Date birthday;
    @JsonIgnore            //Jackson 忽略字段
    private String sex;
    @Expose
    @JsonProperty("city_name")  //Jackson 重命名字段
    private String cityName;

    @Expose(serialize = false)      //gson 忽略字段
    private String sex2;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", sex2='" + sex2 + '\'' +
                ", cityName='" + cityName + '\'' +
                '}';
    }

    public String getSex2() {
        return sex2;
    }

    public void setSex2(String sex2) {
        this.sex2 = sex2;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    // Getters 和 Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

1. 使用 Jackson:业界标配

代码语言:javascript
复制
package com.example.core.mydemo.json2025;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.annotations.Expose;
import com.fasterxml.jackson.core.type.TypeReference;

import java.util.Date;
import java.util.Map;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        //(through reference chain: com.example.core.mydemo.json2025.User["cityName"])
        String json = "{\"id\":1,\"name\":\"张三\",\"birthday\":\"2025-03-04 10:00:00\",\"sex\":\"男\",\"city_name\":\"北京\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        /**
         * JSON 转对象(反序列化)
         */
        User user = objectMapper.readValue(json, User.class);
        System.out.println(user.toString()); // 输出:User{id=1, name='张三', birthday=Tue Mar 04 18:00:00 CST 2025, sex='null', cityName='北京'}

        Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
        System.out.println("map=" + map); // 输出: map={id=1, name=张三, birthday=2025-03-04 10:00:00, sex=男, city_name=北京}


        /**
         * 对象转 JSON(序列化)
         */
        user = new User();
        user.setId(1);
        user.setName("李四");
        //测试注解高级功能
        user.setBirthday(new Date());
        user.setSex("男");
        user.setCityName("上海");
        json = objectMapper.writeValueAsString(user);
        System.out.println(json); // 输出:{"id":1,"name":"李四","birthday":"2025-03-05","city_name":"上海"}
    }
}

2.使用 Gson:轻量好用

代码语言:javascript
复制
package com.example.core.mydemo.json2025;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.Date;
import java.util.Map;

public class GsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"王五\"}";

        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);
        System.out.println(user.getName()); // 输出:王五
        /**
         * 反序列化
         */
        Map map = gson.fromJson(json, Map.class);
        System.out.println("map=" + map); // 输出: map={id=1.0, name=王五}


        user = new User();
        user.setId(2);
        user.setName("赵六");
        //测试注解高级功能
        user.setBirthday(new Date());
        user.setSex2("男");
        user.setCityName("上海");
        /**
         * 序列化
         */
        GsonBuilder builder = new GsonBuilder();
        builder.excludeFieldsWithoutExposeAnnotation();   //配合@Expose使用,其他的字段也都要加上该注释,默认是true
        Gson gson3 = builder.create();
        json = gson3.toJson(user);
        System.out.println(json);   // 输出:{"id":2,"name":"赵六"}

    }

}

3.使用 FastJSON:高性能

代码语言:javascript
复制
package com.example.core.mydemo.json2025;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

public class FastJsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"小明\"}";

        User user = JSON.parseObject(json, User.class);
        System.out.println(user.getName()); // 输出:小明
        /**
         * 反序列化
         */
        Map<String, Object> map = JSON.parseObject(json, Map.class);
        System.out.println("map=" + map);  //输出: map={name=小明, id=1}  可以用于支付的异步通知接收消息


        user = new User();
        user.setId(3);
        user.setName("小红");
        //测试注解高级功能
        user.setBirthday(new Date());
        user.setSex2("男");
        user.setCityName("上海");

        //默认
        json = JSON.toJSONString(user);
        System.out.println(json);   //输出: {"birthday":1741164892016,"cityName":"上海","id":3,"name":"小红","sex2":"男"}

        //日期格式  序列化
//        第一种方法:
        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
        json = JSON.toJSONString(user,SerializerFeature.WriteDateUseDateFormat);
        System.out.println(json); // 输出: {"birthday":"2025-03-05","cityName":"上海","id":3,"name":"小红","sex2":"男"}

//        第二种方法:
        json = JSON.toJSONStringWithDateFormat(user, "yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println(json); //输出: {"birthday":"2025-03-05 16:54:52.016","cityName":"上海","id":3,"name":"小红","sex2":"男"}

    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档