如何将JSON响应中的所有键转换为大写?

问题描述 投票:0回答:3

例如我有以下 json 响应:

{
    StaTuS:succees,
    LanGuaGes: {
          Key1: English,
          key2: Spanish,
          kEy3: Indian
    }
} 

响应可以有许多嵌套元素。我想知道如何以这样的方式进行编码,以便在我的响应中将所有键转换为大写,以便它与我在 POJO 类中使用的命名约定相匹配。

像这样:

{
   STATUS:succees,
   LANGUAGES: {
          KEY1: English,
          KEY2: Spanish,
          KEY3: Indian
   }
} 
java json jackson key pojo
3个回答
4
投票

您可以使用自定义 PropertyNamingStrategy:

public class UpperCaseStrategy extends PropertyNamingStrategyBase {

    @Override
    public String translate(String propertyName) {

        return propertyName.toUpperCase();
    }

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(new CustomNamingStrategy());

请参阅此处以供参考。

请注意,在

com.fasterxml.jackson.databind.PropertyNamingStrategy
中实施了小写策略,如下所示:

/**
 * Simple strategy where external name simply only uses lower-case characters,
 * and no separators.
 * Conversion from internal name like "someOtherValue" would be into external name
 * if "someothervalue".
 * 
 * @since 2.4
 */
public static class LowerCaseStrategy extends PropertyNamingStrategyBase
{
    @Override
    public String translate(String input) {
        return input.toLowerCase();
    }
}

1
投票

我知道这是一个老问题,但以防万一它有帮助。

public JsonArray jsonKeysUpper(JsonArray arr) {
    JsonArray aux = new JsonArray();
    for(int i = 0; i < arr.size(); ++i)
        aux.add(jsonKeysUpper(arr.get(i).getAsJsonObject()));
    return aux;
}

public JsonObject jsonKeysUpper(JsonObject obj) {
    JsonObject aux = new JsonObject();
    if(obj.isJsonPrimitive()) return obj;
    if(obj.isJsonNull()) return null;
    // Iterate all properties
    for(String o : obj.keySet()) {
        if(obj.get(o).isJsonPrimitive())
            aux.addProperty(o.toUpperCase(), obj.get(o).getAsString());
        else if(obj.get(o).isJsonArray())
            aux.add(o.toUpperCase(), jsonKeysUpper(obj.get(o).getAsJsonArray()));
        else
            aux.add(o.toUpperCase(), jsonKeysUpper(obj.get(o).getAsJsonObject()));
    }
    return aux;
}

0
投票

使用下面的代码将您的 json 转换为大写字符串键 json

ObjectMapper obj = new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE); 
obj.convertValue(jsonString, Map.class);
© www.soinside.com 2019 - 2024. All rights reserved.