例如我有以下 json 响应:
{
StaTuS:succees,
LanGuaGes: {
Key1: English,
key2: Spanish,
kEy3: Indian
}
}
响应可以有许多嵌套元素。我想知道如何以这样的方式进行编码,以便在我的响应中将所有键转换为大写,以便它与我在 POJO 类中使用的命名约定相匹配。
像这样:
{
STATUS:succees,
LANGUAGES: {
KEY1: English,
KEY2: Spanish,
KEY3: Indian
}
}
您可以使用自定义 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();
}
}
我知道这是一个老问题,但以防万一它有帮助。
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;
}
使用下面的代码将您的 json 转换为大写字符串键 json
ObjectMapper obj = new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
obj.convertValue(jsonString, Map.class);