FastJson在将bean转成JSON字符串时, 默认使用CamelCase(驼峰命名)的配置;

在1.2.15版本之后,FastJson支持配置PropertyNamingStrategy,有四种配置格式: CamelCase; PascalCase; SnakeCase; KebabCase.

1 . 配置项内容

配置方式 说明 Java属性名 JSON属性名
CamelCase 驼峰命名,首字母小写 UserName userName
PascalCase 帕斯卡命名,首字母大写 userName UserName
SnakeCase 蛇形命名,大写转小写并以下划线连接 userName user_name
KebabCase 短横线命名,大写转小写并以短横线连接 userName user-name

2 . 配置操作

2.1 全局配置

SerializeConfig.getGlobalInstance().propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;

2.2 用注解的方式对某个bean配置

@JSONType(naming=PropertyNamingStrategy.SnakeCase)
public class User {//...
}

2.3 局部配置

// 生产环境中,config要做singleton处理,要不然会存在性能问题
SerializeConfig config = new SerializeConfig();
config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;User user = new User();
user.setUserName("Xing");
String json = JSON.toJSONString(model, config);
Assert.assertEquals("{\"user_name\":\"Xing\"}", json);

3 . 源码解析

package com.alibaba.fastjson;/*** @since 1.2.15*/
public enum PropertyNamingStrategy {CamelCase, //PascalCase, //SnakeCase, //KebabCase;public String translate(String propertyName) {switch (this) {case SnakeCase: {StringBuilder buf = new StringBuilder();for (int i = 0; i < propertyName.length(); ++i) {char ch = propertyName.charAt(i); //获取每一个字符if (ch >= 'A' && ch <= 'Z') { //如果为A-Zchar ch_ucase = (char) (ch + 32); //转为小写的a-zif (i > 0) {buf.append('_'); //并在该字符后追加"_"}buf.append(ch_ucase);} else {buf.append(ch);}}return buf.toString();}case KebabCase: {StringBuilder buf = new StringBuilder();for (int i = 0; i < propertyName.length(); ++i) {char ch = propertyName.charAt(i); //获取每一个字符if (ch >= 'A' && ch <= 'Z') { //如果为A-Zchar ch_ucase = (char) (ch + 32); //转为小写的a-zif (i > 0) {buf.append('-'); //并在该字符后追加"-"}buf.append(ch_ucase);} else {buf.append(ch);}}return buf.toString();}case PascalCase: {char ch = propertyName.charAt(0); //获取第一个字符if (ch >= 'a' && ch <= 'z') { //如果首字母是a-zchar[] chars = propertyName.toCharArray();chars[0] -= 32; //将首字母转为大写return new String(chars);}return propertyName;}case CamelCase: {char ch = propertyName.charAt(0); //获取第一个字符if (ch >= 'A' && ch <= 'Z') { //如果首字母是A-Zchar[] chars = propertyName.toCharArray();chars[0] += 32; //将首字母转为小写return new String(chars);}return propertyName;}default:return propertyName;}}
}

源码非常简单明了 , 一看就明白FastJson是怎么实现的

FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析相关推荐

  1. 读取CSV文件内容,将其转换成JSON字符串输出

    CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; impo ...

  2. 把对象转换成JSON字符串 第二稿支持移动设备

    /*** 导入jackson包 把对象转换成JSON字符串 第二稿 支持移动设备* @param pn* @param request* @return*/@RequestMapping(value ...

  3. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  4. JSONSerializer把类转换成JSON字符串

    JSONSerializer把类转换成JSON字符串 阅读优秀的代码真的是种享受,从ProMesh的项目中发现了现在的一段优美的代码,记下来,也让喜欢它的人有机会阅读到. //============ ...

  5. 将map转换成json字符串

    import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;public class Transfer {p ...

  6. 分享一个小工具:Excel表高速转换成JSON字符串

    在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...

  7. Java字节数组转换成十六进制字符串的几种方法

    前言 最近在项目中需要将字节数组转换成十六进制字符串,而Java内置的库中并没有相关工具可用,因此查了一下byte数组转hex字符串的相关方法,列出如下,需要可以直接拿来使用. 方法1:使用Strin ...

  8. 读取xml文件转成ListT对象的两种方法(附源码)

    读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...

  9. String转JSONObject,JSONObject转JSONArray,JSONArray数组转换成JSON字符串

    如果用的是jar包 则导包为 net.sf.json.JSONObject 如果用的是fastjson  则导包为 import com.alibaba.fastjson.JSONObject 以下为 ...

最新文章

  1. Python map() 函数
  2. 教你一招如何使用几行代码实现zookeeper作为springcloud的服务注册中心
  3. 6大设计原则之开闭原则
  4. Linux 使用正则表达式的常用命令
  5. COM中关于使用DLL的一些知识点
  6. 【观点讨论与支撑】读书到底有没有用?
  7. BZOJ2754 [SCOI2012]喵星球上的点名
  8. 基于单片机的人体健康检测系统
  9. 豆瓣9.6分,Scala编程圣经第5版隆重来袭
  10. mysql jemalloc_jemalloc优化MySQL、Nginx内存管理
  11. JS日历控件 (兼容IE firefox) 可选择时间
  12. iphone11支持es6吗_我这样用拼多多砍价群,拿到了不要钱的iPhone11
  13. 洛谷 P1192 台阶问题
  14. spark 概述与安装
  15. 数据库课程设计-宿舍管理系统
  16. 怎样阅读论文(台湾彭明辉)ZT
  17. Python 做个小爬虫,要看技术交流群里小伙伴们的上榜情况,真的很方便!
  18. 增值税发票查询网站进不去解决办法
  19. 2009年9月18日胜利公园放生
  20. 3d建模薪资多少?工作后还能转行游戏建模吗?

热门文章

  1. 以数据库思维理解区块链
  2. 201521123063 《Java程序设计》 第7周学习总结
  3. dedecms如何快速删除跳转的文章(记得清空内容回收站)
  4. [UI] 精美UI界面欣赏[8]
  5. 关于js中正则表达式链接
  6. poj 1734 (最小环)
  7. 度微尔开发者联盟网站
  8. 冒号和他的学生们(连载18)——系统语言
  9. [Axios] FETCH中的基础语法
  10. JS-函数(匿名-自调用-回调)-递归