当前位置: 首页 > news >正文

设置Json对象输出字段顺序

场景

通过情况下对前端输出json格式不需要关注字段顺序,但某些特殊场景需要设置字段输出顺序(例nginx需要对特殊字段顺序进行加密处理);框架有默认的顺序,如 jackson 默认使用字段声明的顺序, fastjson 默认是使用字典序。

jackson

使用@JsonPropertyOrder指定顺序

public class JacksonController {public static void main(String[] args) throws JsonProcessingException {//1: 默认顺序:字段声明的顺序Cat1 cat1 = new Cat1();cat1.setAge(1);cat1.setName("咪咪");cat1.setHobby("sleep");ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(cat1);System.out.println("json:"+json.toString());//2: 使用@JsonPropertyOrder指定顺序Cat2 cat2 = new Cat2();cat2.setAge(1);cat2.setName("咪咪002");cat2.setHobby("eat");String json2 = objectMapper.writeValueAsString(cat2);System.out.println("json2:"+json2.toString());}
}@Data
class Cat1 {private String hobby;private String name;private Integer age;
}@Data
@JsonPropertyOrder({"name", "age", "hobby"})
class Cat2 {private String hobby;private String name;private Integer age;
}
fastjson

1、使用@JsonField的ordinal指定顺序,数越小优先级越高,默认为0
2、使用@JSONType的orders属性指定字段顺序

public class FastjsonController {public static void main(String[] args){//1: 默认顺序:字段声明的顺序Dog1 dog1 = new Dog1();dog1.setAge(1);dog1.setName("嘟嘟001");dog1.setHobby("eat");String json = JSON.toJSONString(dog1);System.out.println("默认顺序(字段声明的顺序):"+json.toString());//2: 使用@JsonField的ordinal指定顺序,数越小优先级越高,默认为0Dog2 dog2 = new Dog2();dog2.setAge(1);dog2.setName("嘟嘟002");dog2.setHobby("eat");String json2 = JSON.toJSONString(dog2);System.out.println("JsonField ordinal指定顺序:"+json2.toString());//3: 使用@JSONType的orders属性指定字段顺序Dog3 dog3 = new Dog3();dog3.setAge(1);dog3.setName("嘟嘟003");dog3.setHobby("eat");String json3 = JSON.toJSONString(dog3);System.out.println("JSONType orders指定顺序:"+json3.toString());}
}@Data
class Dog1 {private String hobby;private String name;private Integer age;
}@Data
class Dog2 {@JSONField(ordinal = 3)private String hobby;@JSONField(ordinal = 2)private String name;@JSONField(ordinal = 1)private Integer age;
}@Data
@JSONType(orders = {"name", "age", "hobby"})
class Dog3 {private String hobby;private String name;private Integer age;
}
注意

将json字段串转换成JSON对象时,如要保持原字段顺序,fastjson使用Feature.OrderedField参数;

JSON.parseObject(json, Feature.OrderedField);
SONObject.parseObject(json, Feature.OrderedField);
http://www.lryc.cn/news/285397.html

相关文章:

  • 当 OpenTelemetry 遇上阿里云 Prometheus
  • 【Flink-1.17-教程】-【四】Flink DataStream API(1)源算子(Source)
  • 【蓝桥杯EDA设计与开发】资料汇总以及立创EDA及PCB相关技术资料汇总(持续更新)
  • JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON
  • rpc跨平台通信的简单案例,java和go
  • Java设计模式之观察者模式详解
  • 分布式锁实现(mysql,以及redis)以及分布式的概念
  • 实现分布式锁:Zookeeper vs Redis
  • 电脑录屏必备技能,让分享变得更加简单!
  • 重构改善既有代码的设计-学习(一):封装
  • Python图像处理【19】基于霍夫变换的目标检测
  • Spring+SprinMVC+MyBatis注解方式简易模板
  • Python基础第五篇(Python数据容器)
  • 【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机
  • GaussDB数据库中的MERGE INTO介绍
  • 2024年上海高考数学最后四个多月的备考攻略,目标140+
  • SSL证书自动化管理有什么好处?如何实现SSL证书自动化?
  • 路由器初始化配置、功能配置
  • node介绍
  • 海外抖音TikTok、正在内测 AI 生成歌曲功能,依靠大语言模型 Bloom 进行文本生成歌曲
  • 【ARM 嵌入式 编译系列 3.6 -- 删除lib中的某个文件】
  • web架构师编辑器内容-图层拖动排序功能的开发
  • 3.RHCSA脚本配置及通过node2改密码
  • AtCoder Regular Contest 170(A~B)
  • rk1126, 实现 yolov8 目标检测
  • 【软件测试】学习笔记-网站可扩展性架构设计
  • 深度学习常用代码总结(k-means, NMS)
  • 数据结构·顺序表应用
  • 第一个 OpenGL 程序:旋转的立方体(VS2022 / MFC)
  • 剩余银饰的重量 - 华为OD统一考试