首页 > 其他分享 >json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则

json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则

时间:2023-10-28 09:22:25浏览次数:28  
标签:fastJson jackson String couponCode orderType gson json public

json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则

fastJson会根据对象的字段的首字母来排序。
而jackson,gson是根据对象的类中定义的属性的代码中的先后顺序输出。不会排序。

针对业务场景需要对接口中对象存在集合列表等,需要约定对象中的属性按字母升序来排序,而不是乱序。来做签名和验签。
否则“签名错误”,需要排查签名前和签名后的字符串对比。来发现差异。

package com.example.core.mydemo.json5;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试券对象
 */
public class MyCouponIdObject {
    private String sex;
    private Integer orderType;
    private String couponCode;
    private String name;

    public String getSex() {
        return sex;
    }

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

    public String getName() {
        return name;
    }

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

    private static final ObjectMapper MAPPER = new ObjectMapper();

    public String getCouponCode() {
        return couponCode;
    }

    public void setCouponCode(String couponCode) {
        this.couponCode = couponCode;
    }

    public Integer getOrderType() {
        return orderType;
    }

    public void setOrderType(Integer orderType) {
        this.orderType = orderType;
    }

    public static void main(String[] args) {
        MyCouponIdObject c1 = new MyCouponIdObject();
        c1.setOrderType(1);
        c1.setCouponCode("111");
        c1.setName("Eric");
        c1.setSex("男");

        System.out.println("fastJson=" + JSON.toJSONString(c1));


        try {
            System.out.println("jackson=" + MAPPER.writeValueAsString(c1));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        System.out.println("gson=" + new Gson().toJson(c1));
        
        /**
         * fastJson={"couponCode":"111","orderType":1}
         * jackson={"orderType":1,"couponCode":"111"}
         * gson={"orderType":1,"couponCode":"111"}
         *
         * 新增两个字段后 output
         * fastJson={"couponCode":"111","name":"Eric","orderType":1,"sex":"男"}
         * jackson={"sex":"男","orderType":1,"couponCode":"111","name":"Eric"}
         * gson={"sex":"男","orderType":1,"couponCode":"111","name":"Eric"}
         * 发现:fastJson会根据字段的首字母来排序。
         * 而jackson,gson是根据对象的类中定义的属性的先后顺序输出。
         */
    }
}

 

标签:fastJson,jackson,String,couponCode,orderType,gson,json,public
From: https://www.cnblogs.com/oktokeep/p/17793630.html

相关文章

  • 第 12 节 JSON应用
    认识JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集,用于存储和交换文本信息。JSON使用JavaScript的语法描述和操纵数据,但它是Python、Java、C++和其他许多编程语言的一个子集。JSON的特点:语法简单:JSON使用易于阅读的键值对形式表示数......
  • FastAPI学习-14. JSONResponse 返回JSON内容
    当你创建一个 FastAPI 路径操作 时,你可以正常返回以下任意一种数据:dict,list,Pydantic模型,数据库模型等等。FastAPI 默认会使用 jsonable_encoder 将这些类型的返回值转换成JSON格式,默认情况下会以content-type:application/json格式返回在有些情况下,我们需要在路径操作......
  • FastAPI学习-15.JSON 编码器 jsonable_encoder
    前言在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的数据类型(如dict、list等)。比如,如果您需要将其存储在数据库中。对于这种要求, FastAPI提供了jsonable_encoder()函数。使用jsonable_encoderjsonable_encoder在实际应用场景中,可能需要将数据类型(如:Pydanti......
  • Jquery 将 JSON 列表的 某个属性值,添加到数组中,并判断一个值,在不在数据中
    jquery将JSON列表的某个属性值,添加到数组中如果你有一个JSON列表,并且想要将每个对象的某个属性值添加到数组中,你可以使用jQuery的$.each()函数来遍历JSON列表,并获取所需的属性值。以下是一个示例代码:varjsonList=[{"name":"John","age":30,"city":"NewYork"}......
  • 获取配置json地址
    //加载配置文件varconfigurationBuilder=newConfigurationBuilder();//添加配置文件路径configurationBuilder.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");//获取Url信息varconfiguration=configurationBuilder.Build();stringname......
  • nlohmannjson使用笔记
    使用引用获取字段值,以避免数据复制:autoid=jfo["id"].get_ref<conststd::string&>();使用解引用访问字段值,提高效率并简化代码if(autoit=jfo.find("transforms");it!=jfo.end()){for(constauto&jto:*it){autoid=jto["id"].get......
  • 自定义过滤器配置 Shiro 认证失败返回 json 数据
    byemanjusakafrom​https://www.emanjusaka.top/archives/11彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。Shiro权限框架认证失败默认是重定向页面的,这对于前后端分离的项目及其不友好,可能会造成请求404的问题。现在我们自定义过滤器实现认证失败返回json数......
  • 什么是yaml格式与json格式
    什么是yaml格式与json格式yaml格式:文件名格式以.yml.yaml为后缀,用空格缩进表示字段的层级关系,可读性高,易于人类管理yaml格式布尔值类型:只有在是true/false时为真,假的意识例:debug:true 布尔值类型debug:"true"字符串类型​debug:false  布尔值类型debu......
  • Python_Json的使用总结
    应用场景json应用于批量数据进行组织管理--将无序变为有序-将输入结构数据进行组织形式标注化直观问题1.函数功能:dump在英文中有转储,转存的意思 json.dump(data,f) json.dump(data,f,indent=4)#使用缩进和换行格式化JSON dumps()dumps是dump......
  • C#之System.Text.Json的用法
    System.Text.Json是C#中的一个JSON序列化和反序列化库,它在.NETCore3.0及更高版本中提供了内置支持。以下是System.Text.Json的用法详解:JSON序列化JSON序列化是将.NET对象转换为JSON字符串的过程。usingSystem;usingSystem.Text.Json;publicclassPerson......