list转json格式,实现json格式的key大写

一般转换为json格式后key都是小写的,但是有时候json格式解析时不同的方式可能对大写小敏感,导致解析失败,这里记录一下怎么在转json格式时key为大写

注:主要运用到的一个json工具包是net.sf.json,主要包是net.sf.json.JsonConfig,没有的可以先引入依赖

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.3</version>
            <classifier>jdk15</classifier>
            <!-- jdk版本,必须写jdk15 -->
</dependency>


这里必须要加一个jdk版本,但是我写jdk8的时候是没有引入成功,也没有net.sf.json.JsonConfig的包的,填写jdk15就可以了,不知道是不是这个方法是在后面的版本才有的,这里没有去研究了,有知道的大佬可以评论告知我一下。

1、准备工作做好后,我们开始编写一个测试用的实体类

package com.test.entity;

import com.annotation.Explain;
import io.swagger.annotations.ApiModelProperty;

import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;


public class TestBean {

    private  int  id;
    //菜单名称
    private  String  name_ss;
    //菜单url
    private  String  url;
    //顺序
    private  int  sort;
    
    private Date endDate;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName_ss() {
        return name_ss;
    }

    public void setName_ss(String name_ss) {
        this.name_ss = name_ss;
    }

    public String getUrl() {
        return url;
    }

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

    public int getSort() {
        return sort;
    }

    public void setSort(int sort) {
        this.sort = sort;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }
}

2、主体方法(代码里面都有注释,这里不做讲解了)

/***
     * list转json格式,实现json格式的key大写
     * @param eList list对象
     * @param target list泛型属性.class
     * @param aClass Class<list泛型属性>
     * @return
     */
    public static String setJsonKeyUP(List<?> eList,Class target,Class<?> aClass){
        //返回json格式key转大写
        JsonConfig jsonConfig=new JsonConfig();
        //属性过滤
        jsonConfig.registerPropertyExclusions(target, new String[]{"id"});
        PropertyNameProcessor propertyNameProcessor=new PropertyNameProcessor() {
            @Override
            public String processPropertyName(Class aClass, String s) {
                //System.out.println("aClass = [" + aClass + "], s = [" + s + "]");
                return s.toUpperCase();
            }
        };
        jsonConfig.registerJsonPropertyNameProcessor(target,propertyNameProcessor);
        jsonConfig.registerJsonPropertyNameProcessor(aClass,propertyNameProcessor);
        JSONArray jsonArray=JSONArray.fromObject(eList,jsonConfig);
        String result = jsonArray.toString();

        return result;
    }

	//list转json
    public static String setJsonStr(List<?> list){
        JSONArray jsonArray=JSONArray.fromObject(list);
        String result = jsonArray.toString();
        return result;
    }

3、main方法测试

public static void main(String[] args) {
        List<TestBean> beanList = new ArrayList<TestBean>();
        for (int i = 0; i <3 ; i++) {
            TestBean bean = new TestBean();
            bean.setName_ss("张三"+i);
            bean.setSort(i);
            beanList.add(bean);
        }
        Class<TestBean> aClass=null;
        //list转json格式,实现json格式的key大写
        String str = setJsonKeyUP(beanList, TestBean.class,aClass);
        System.out.println("json格式的key大写:"+str);

        List<TestBean> tsetList = new ArrayList<>();
        TestBean bean = new TestBean();
        bean.setName_ss(str);
        tsetList.add(bean);
        //list转json
        String strJson =setJsonStr(tsetList);
        System.out.println("带斜杠的json格式字符串:"+strJson);
        //去除json带“\”的转义符
        String tmp = StringEscapeUtils.unescapeJavaScript(strJson);
        System.out.println("去掉斜杠后的json格式字符串:"+tmp);

    }
这个第一个输出就是list转json格式后key大写的字符串
json格式的key大写:
[{"ENDDATE":null,"NAME_SS":"张三0","SORT":0,"URL":""},
{"ENDDATE":null,"NAME_SS":"张三1","SORT":1,"URL":""},
{"ENDDATE":null,"NAME_SS":"张三2","SORT":2,"URL":""}]

这里随带说一下另一个问题,就是在json字符串进行二次转json的时候回出现""转义符(实例为:第二个输出),有时候去解析的时候也会有问题,这时候我们要去掉斜杆转义符!

带斜杠的json格式字符串:[{"endDate":null,"id":0,"name_ss":"
[{\"ENDDATE\":null,\"NAME_SS\":\"张三0\",\"SORT\":0,\"URL\":\"\"},
{\"ENDDATE\":null,\"NAME_SS\":\"张三1\",\"SORT\":1,\"URL\":\"\"},
{\"ENDDATE\":null,\"NAME_SS\":\"张三
2\",\"SORT\":2,\"URL\":\"\"}]","sort":0,"url":""}]

去掉斜杆转义符就一行代码
String tmp = StringEscapeUtils.unescapeJavaScript(strJson);
去掉斜杠后的json格式字符串:[{"endDate":null,"id":0,"name_ss":"
[{"ENDDATE":null,"NAME_SS":"张三0","SORT":0,"URL":""},
{"ENDDATE":null,"NAME_SS":"张三1","SORT":1,"URL":""},
{"ENDDATE":null,"NAME_SS":"张三
2","SORT":2,"URL":""}]","sort":0,"url":""}]

你学费了吗?
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值