场景:
flink 从pulsar 中消费业务sdk 上报的数据 ,sdk 上报的数据字段名是驼峰命名 。现需要将其数据写入starrocks 说明:starrocks 中的字段名为下划线格式。 也就是说 要将类似 personInfo 格式转换为 person_info
json key 类型转换核心代码
public class JsonKeyUtil implements Serializable {
public static JSONObject covertObject(JSONObject object) {
if (object == null) {
return null;
}
JSONObject newObject = new JSONObject();
Set<String> set = object.keySet();
for (String key : set) {
Object value = object.get(key);
if (value instanceof JSONArray) {
//数组
value = covertArray(object.getJSONArray(key));
} else if (value instanceof JSONObject) {
//对象
value = covertObject(object.getJSONObject(key));
}
//这个方法自己写的改成驼峰,也可以改成大写小写
key = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, key);
newObject.put(key, value);
}
return newObject;
}
public static JSONArray covertArray(JSONArray array) {
if (array == null) {
return null;
}
JSONArray newArray = new JSONArray();
for (int i = 0; i < array.size(); i++) {
Object value = array.get(i);
if (value instanceof JSONArray) {
//数组
value = covertArray(array.getJSONArray(i));
} else if (value instanceof JSONObject) {
//对象
value = covertObject(array.getJSONObject(i));
}
newArray.add(value);
}
return newArray;
}
}