JSONObject和JSONArray中的key值转大写或小写的通用方法

本文介绍了一种将JSON数据中的键(key)统一转换为大写或小写的实用工具类。通过递归遍历JSON对象和数组,确保所有键名符合指定的大小写规范,适用于数据标准化处理。

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

一.有时需要json数据的key全部转成大写或者转成小写
二.直接上代码,一封装成一个工具类了,直接传入JSONObject或JSONArray对象,调用数组或对象的方法就能实现.
package cn.wisesign.commonutil.jsonpath;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Iterator;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**

  • 修改JSON的key为小写或者大写
    */
    @SuppressWarnings(“rawtypes”)
    public class JSONKeyTransfer {

    public static final String JSONOBJECT_KEY = “JSONObject”;

    public static final String JSONARRAY_KEY = “JSONArray”;

    /**

    • 修改json的key为大写或者小写
    • @throws
      */
      public static JSONObject transferJsonKey(JSONObject json) {
      JSONObject object = new JSONObject();
      if (json.getClass().toGenericString().endsWith(JSONOBJECT_KEY)) {
      JSONObject jsonObject = (JSONObject)json;
      Iterator iterator = jsonObject.keys();
      while (iterator.hasNext()) {
      String jsonKey = (String) iterator.next();
      Object valueObject = jsonObject.get(jsonKey);
      if (valueObject.getClass().toString().endsWith(JSONOBJECT_KEY)) {
      JSONObject checkObject = JSONObject.fromObject(valueObject);
      // 当值为null时,valueObject还是JSONObject对象,判空是不成立的,要判断是否是nullObject
      if (!checkObject.isNullObject()) {
      object.accumulate(jsonKey.toUpperCase(), transferJsonKey((JSONObject) valueObject));
      } else {
      object.accumulate(jsonKey, null);
      }
      } else if (valueObject.getClass().toString().endsWith(JSONARRAY_KEY)) {
      object.accumulate(jsonKey.toUpperCase(), transferJsonArray(jsonObject.getJSONArray(jsonKey)));
      }else{
      object.accumulate(jsonKey.toUpperCase(), valueObject);
      }
      }
      }
      return object;
      }

    /**

    • JSONArray key大小写转换
    • @throws
      */
      public static JSONArray transferJsonArray(JSONArray jsonArray) {
      JSONArray array = new JSONArray();
      if (null != jsonArray && jsonArray.size() > 0) {
      for (Object object : jsonArray) {
      if (object.getClass().toString().endsWith(JSONOBJECT_KEY)) {
      array.add(transferJsonKey((JSONObject) object));
      } else if (object.getClass().toString().endsWith(JSONARRAY_KEY)) {
      array.add(transferJsonArray((JSONArray) object));
      }
      }
      }
      return array;
      }

    public static void main(String[] args) {
    String jsonStr = “”;
    try {
    File jsonFile = new File(“d:\test.json”);
    FileReader fileReader = new FileReader(jsonFile);

         Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
         int ch = 0;
         StringBuffer sb = new StringBuffer();
         while ((ch = reader.read()) != -1) {
             sb.append((char) ch);
         }
         fileReader.close();
         reader.close();
         jsonStr = sb.toString();
    

// jsonStr = jsonStr.toUpperCase();
}catch(Exception e){

    }
	//String str = "{\"contextDTO\":{\"appPackAccToken\":null,\"cAllChainId\":\"\",\"callCount\":0,\"currentCallId\":\"0\",\"employeeId\":\"00000000-0000-0000-0000-000000000000\",\"id\":null,\"latitude\":null,\"loginCurrentCulture\":0,\"loginDepartment\":\"00000000-0000-0000-0000-000000000000\",\"loginDepartmentName\":null,\"loginIP\":null,\"loginOrg\":\"00000000-0000-0000-0000-000000000000\",\"loginTenantId\":\"00000000-0000-0000-0000-000000000000\",\"loginTenantName\":null,\",\"loginUserCode\":\"dddddd\",\"loginUserID\":\"79694a50-ea5f-4d66-99ef-bc7661cc2477\",\"loginUserName\":\"测试\",\"longitude\":null,\"sessionID\":\"97571283-6eed-4fd5-9d7c-6c60dbd362c9\"},\"statusCode\":null}";
	JSONObject object = JSONObject.fromObject(jsonStr);
    //JSONArray object = JSONArray.fromObject(jsonStr);
	object = transferJsonKey(object);
	//object = transferJsonArray(object);
	System.out.println(object.toString());
}

}

### 如何在 JSON 中将字段名称定义为大写 当 Java 实体类属性被序列化为 JSON 字符串时,默认行为可能会导致字段名称变为小写。为了确保这些字段名称保持大写,在使用 Jackson 库的情况下,可以通过自定义 `ObjectMapper` 的配置来实现这一点。 #### 方法一:通过全局配置使所有字段名称大写 可以在创建 `ObjectMapper` 对象时指定命名策略,使得所有的字段都按照特定的方式进行换: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategy; public class Main { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); // 设置命名策略为全部字母大写 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE); MyEntity entity = new MyEntity("Example", 123); String jsonString = mapper.writeValueAsString(entity); System.out.println(jsonString); } } ``` 这种方法适用于希望整个应用程序中所有实体类的字段都被统一换成大写的场景[^4]。 #### 方法二:针对单个字段设置大写 如果只需要某些特定字段的大写形式,则可以利用 Jackson 提供的注解机制来进行局部控制。例如,使用 `@JsonProperty` 注解显式指明 JSON 输出时使用的键名: ```java import com.fasterxml.jackson.annotation.JsonProperty; class MyEntity { @JsonProperty("ENTITY_NAME") private final String name; @JsonProperty("VALUE") private final int value; // 构造函数、getter setter... } ``` 这种方式允许更加灵活地管理不同字段的表现形式,而不必改变其他部分的行为[^5]。 #### 方法三:手动调整 JSON 键中的嵌套 key小写 对于已经存在的 JSON 数据,也可以采用遍历并修改的方法使其满足需求。这里给出一段基于 org.json 库的例子代码用于演示如何递归地把 JSON 结构里的 keys 换成大写: ```java import org.json.JSONArray; import org.json.JSONObject; public class JsonKeyToUpper { public static Object convertKeysToUpperCase(Object json) { if (json instanceof JSONObject) { JSONObject jsonObject = (JSONObject) json; JSONArray names = jsonObject.names(); if (names != null) { JSONObject upperCaseJson = new JSONObject(); for (int i = 0; i < names.length(); ++i) { String key = names.getString(i).toUpperCase(); upperCaseJson.put(key, convertKeysToUpperCase(jsonObject.get(names.getString(i)))); } return upperCaseJson; } else { return json; } } else if (json instanceof JSONArray) { JSONArray jsonArray = (JSONArray) json; JSONArray resultArray = new JSONArray(); for (int i = 0; i < jsonArray.length(); ++i) { resultArray.put(convertKeysToUpperCase(jsonArray.get(i))); } return resultArray; } return json; } // 测试用法 public static void main(String[] args) { JSONObject originalJson = new JSONObject("{\"name\":\"John\", \"age\":30}"); Object convertedJson = convertKeysToUpperCase(originalJson); System.out.println(convertedJson.toString()); } } ``` 这段程序能够有效地处理简单的 JSON 对象以及复杂的多层嵌套结构,并且不会破坏原始数据的内容完整性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值