首页 > 其他分享 >支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码

支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码

时间:2024-06-15 15:32:20浏览次数:19  
标签:JSONObject 和验 JSON json userJson user com age

支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码

支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象
https://www.cnblogs.com/oktokeep/p/18249346

package com.example.core.mydemo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.core.mydemo.json2.GsonUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.HashMap;
import java.util.Map;

public class MapTest {
    private static final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    public static void main(String[] args) throws JsonProcessingException {
        /**
         * output:
         * {aaa=111, ccc=333, bbb=222}
         * gson={"aaa":"111","ccc":"333","bbb":"222"}
         * JSON={"aaa":"111","ccc":"333","bbb":"222"}
         * JSONObject={"aaa":"111","ccc":"333","bbb":"222"}
         */
        Map<String,String> map = new HashMap<>();
        map.put("aaa","111");
        map.put("bbb","222");
        map.put("ccc","333");
        System.out.println(map);

        System.out.println("gson="+gson.toJson(map));
        System.out.println("JSON="+JSON.toJSONString(map));
        JSONObject jsonObject = (JSONObject) JSON.toJSON(map);
        System.out.println("JSONObject="+jsonObject.toJSONString());

        /**
         * output:  结论:gson会转义编码符号,
         * ==符号错误,不一致
         * gson={"user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/\u003d\u003d"},"sign":"签名串"}
         * gson-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
         *
         * json字符串顺序不一致
         * JSON={"sign":"签名串","user":{"age":50,"name":"刘德华","url":"http://www.baidu.com/=="}}
         * JSON-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
         *
         * 使用JSONObject是最优解。json字符串顺序和==符号都一致
         * JSONObject={"sign":"签名串","user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}}
         * JSONObject-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
         *
         * 使用jackson也可以保持json字段顺序和==符号一致
         * MAPPER={"user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/=="},"sign":"签名串"}
         * MAPPER-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
         */
        User user = new User();
        user.setName("刘德华");
        user.setAge(50);
        user.setUrl("http://www.baidu.com/==");

        People people = new People();
        people.setUser(user);
        people.setSign("签名串");

        String json1 = new Gson().toJson(people);
        System.out.println("gson=" + json1);
        JSONObject JSONObject = JSON.parseObject(json1);
        String userJson = JSONObject.getString("user");
        System.out.println("gson-userJson=" + userJson);

        json1 = JSON.toJSONString(people);
        System.out.println("JSON=" + json1);

        JSONObject = JSON.parseObject(json1);
        userJson = JSONObject.getString("user");
        System.out.println("JSON-userJson=" + userJson);

        JSONObject jsonObject2 = (JSONObject) JSON.toJSON(people);
        json1 = jsonObject2.toJSONString();
        System.out.println("JSONObject=" + json1);

        JSONObject = JSON.parseObject(json1);
        userJson = JSONObject.getString("user");
        System.out.println("JSONObject-userJson=" + userJson);

        json1 = MAPPER.writeValueAsString(people);
        System.out.println("MAPPER=" + json1);

        JSONObject = JSON.parseObject(json1);
        userJson = JSONObject.getString("user");
        System.out.println("MAPPER-userJson=" + userJson);


    }
    static class People{
        User user;
        String sign;

        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }

        public String getSign() {
            return sign;
        }

        public void setSign(String sign) {
            this.sign = sign;
        }
    }
    static class User{
        private String name;
        private Integer age;
        private String url;

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getName() {
            return name;
        }

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

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }
}

 

标签:JSONObject,和验,JSON,json,userJson,user,com,age
From: https://www.cnblogs.com/oktokeep/p/18249351

相关文章

  • 基于cJSON及心知天气模块化实现获取城市气象信息(现在、未来)
    V1.02024年6月14日发布于博客园目录序言功能描述运行结果示范注意!代码weather_api.hweather_api.cdemo.ccJSON.hcJSON.c参考链接序言功能描述用于请求心知天气的信息,现在的信息,未来n天的气象信息(免费版仅能3天).使用域名通过TCP连接到心知天气服务器,采用cJSON进......
  • 利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并
    要使用C语言通过HTTP协议向服务器发送请求并接收响应,你可以使用如libcurl这样的库来发送HTTP请求。libcurl是一个免费且易于使用的客户端URL传输库,支持多种协议,包括HTTP。同时,为了解析服务器响应中的JSON数据,你可以使用cJSON库,这是一个轻量级的JSON解析库。以下是一个简单的示例......
  • fastjson(版本<=1.2.24)复现
    文章目录1.啥是JSON介绍:2.啥是fastjson?3.fastjson序列化/反序列化原理4.fastjson反序列化漏洞原理$复现流程:漏洞影响范围:fastjson<=1.2.24一、漏洞环境搭建二、漏洞验证方法一三、漏洞验证方法二1.啥是JSON介绍:JSON,全称:JavaScriptObjectNotation,作为一个常见的......
  • fastjson2自动转型
    新版本fastjson2auto-type的写法。自定义Cache,或者写RedisSerializer估计会用到这个知识,importcn.seaboot.commons.lang.Warning;importcom.alibaba.fastjson2.JSON;importcom.alibaba.fastjson2.JSONReader;importcom.alibaba.fastjson2.JSONWriter;/***fas......
  • 低代码dsl 可视化 json schema
     低代码=可视化编辑器+组件库+JSON Schema+后端业务+DSL个人理解:JSONSchema是真正的核心,低代码平台实际上是生产和消费JSON数据的平台可视化编辑器一般会包括组件列表(初始化JSON),画布(消费JSON),组件属性配置列表(修改JSON)......
  • jsoncpp的安装及使用
    目录前言安装方法一:apt包管理器方法二:源码编译安装使用编写示例代码写JSON读JSON编译链接输出写JSON读JSON前言本文操作均在ubuntu20.04下进行。安装方法一:apt包管理器①使用包管理器安装这种方法比较简单,直接使用apt包管理器安装jsoncpp:aptinstalllibjsoncpp-dev这条......
  • 利用cJSON库解析http返回参数
    利用cJSON库解析http返回参数在C语言中,使用cJSON库来解析HTTP响应返回的JSON参数通常涉及几个步骤:发送HTTP请求(可以利用soket库进行http请求)接收HTTP响应的数据将接收到的数据作为字符串传递给cJSON库进行解析使用cJSONAPI访问和提取JSON数据以下是一个示例,展示了如何使......
  • 掌握JMeter:深入解析如何提取和利用JSON数据
    前言ApacheJMeter不仅是一个功能强大的性能测试工具,它还可以用于提取和处理响应中的数据。对于现代Web应用,JSON(JavaScriptObjectNotation)已经成为主要的数据交换格式。本文将详细介绍如何在JMeter中提取JSON数据,并将其用于后续的请求或断言。环境准备在开始之前,请确保已经......
  • JSON 和对象的互转(fastjson2 的简单使用)
    fastjson2的简单使用导包随便挑个版本<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.25</version></dependency>使用单个对象Stringstr=JSON.toJSONString......
  • 全国省市区县列表最新JSON2024最新
    2024最新JSON数据,2024年更新中国总共有23个省、5个自治区、4个直辖市、2个特别行政区。最近需要用到中国城市列表的json串数据,费了不少时间,终于得到了比较全面的数据暂时应该没有比我更全的了~~~得出以下数据json格式,XML格式(包含省市,县级市,县),总数:2893个因为JSON串比较长,有1......