JAVA fastjson JSONObject.toJSONString 格式化、缩进、按key排序

该文展示了如何使用JSONObject创建包含专利信息的JSON对象,并通过SerializerFeature配置,详细说明了JSON输出时的格式设置,如字段排序、空值处理和日期格式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSONObject jsonObj = new JSONObject();

jsonObj.put("publication_nunmber", "CN12345678A");
jsonObj.put("publication_date", "2023.01.01");
jsonObj.put("appication_number", "CN202310000001.8");
jsonObj.put("appication_date", "2023.01.01");

String outPutString = JSON.toJSONString(
                jsonObj,
                SerializerFeature.MapSortField,
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteMapNullValue
            );

SerializerFeature 对于输出的JSON 有各种支撑:

public enum SerializerFeature {
    QuoteFieldNames,//输出key时是否使用双引号,默认为true 
    UseSingleQuotes,//使用单引号而不是双引号,默认为false
    WriteMapNullValue,//是否输出值为null的字段,默认为false 
    WriteEnumUsingToString,//Enum输出name()或者original,默认为false
    UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false
    WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null 
    WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null 
    WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null 
    WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null
    SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
    SortField,//按字段名称排序后输出。默认为false
    WriteTabAsSpecial,//把\t做转义输出,默认为false
    PrettyFormat,//结果是否格式化,默认为false
    WriteClassName,//序列化时写入类型信息,默认为false。反序列化是需用到
    DisableCircularReferenceDetect,//消除对同一对象循环引用的问题,默认为false
    WriteSlashAsSpecial,//对斜杠'/'进行转义
    BrowserCompatible,//将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false
    WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
    NotWriteRootClassName,//暂不知,求告知
    DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false 
    BeanToArray //暂不知,求告知
}

`com.alibaba.fastjson.JSONObject.toJSONString` 方法默认生成的是一个较为简洁的 JSON 字符串,但它并不是严格意义上的“压缩到最小程度”的 JSON。 --- ### 默认行为 当你调用 `toJSONString()` 时,默认会移除所有多余的空格、换行等格式化字符,从而生成紧凑形式的 JSON。这种紧凑模式虽然适合传输和存储,但对于人类阅读来说不够友好。 示例代码: ```java import com.alibaba.fastjson.JSONObject; public class Main { public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "Alice"); jsonObject.put("age", 25); String jsonString = JSONObject.toJSONString(jsonObject); System.out.println(jsonString); // 输出 {"name":"Alice","age":25} } } ``` 从上面可以看到,输出结果是一个非常简化的字符串,没有任何缩进或多余空白。 --- ### 自定义序列化选项 如果你需要进一步控制输出样式(如是否包含冗余信息),可以借助 FastJSON 提供的第二个参数——**SerializerFeature** 枚举值列表。比如通过指定特定标志位来启用/禁用某些特性: - **DisableCircularReferenceDetect**: 关闭循环引用检测; - **PrettyFormat**: 启用漂亮的打印布局(增加换行与缩进); - **WriteMapNullValue**: 强制写出 Map 中键对应的 null 值等等... 若想得到完全去掉所有非必要字段及属性标记的标准最小子集表达,则不需要额外添加其他功能开关即可满足需求。 例如下面的例子展示了如何利用 SerializerFeatures 来创建更人性化的展示效果: ```java String prettyJsonStr = JSONObject.toJSONString(jsonObject, SerializerFeature.PrettyFormat, SerializerFeature.WriteDateUseDateFormat); System.out.println(prettyJsonStr); // 输出可能是这样的结构 /* { "name": "Alice", "age": 25 } */ ``` 在这里我们加入了 PrettyFormat 让最终呈现出来的数据更容易被人理解查看。当然如果不加任何自定义配置的话,那么就会返回原始简单的单行版本。 --- ### 结论 因此,`JSONObject.toJSONString(object)` 函数本身确实能将对象转换为接近“最小化”的 JSON 表达式;不过如果是追求极致小体积或者特殊规则下的定制化处理,就需要结合具体的场景考虑采用合适的 serializer features 组合啦!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值