Java中的JSON扁平化指的是將一個嵌套的JSON對象轉化成一個單層的JSON對象。扁平化后的JSON對象只包含基本類型數組和字符串,這樣做的好處是方便數據傳輸和后續的數據處理。
通常,我們采用遞歸的方式來實現JSON的扁平化,在Java中,可以使用JSONObject類和JSONArray類來操作JSON對象。
/**
* 將JSON對象扁平化
*
* @param data 需要扁平化的JSON對象
* @param separator 扁平化后的屬性名分隔符
* @return 返回扁平化后的JSON對象
* @throws JSONException JSON異常
*/
public static JSONObject flattenJSON(JSONObject data, String separator) throws JSONException {
JSONObject result = new JSONObject();
Iteratoriterator = data.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = data.get(key);
if (value instanceof JSONObject) {
JSONObject nestedObject = flattenJSON((JSONObject) value, separator);
Iteratorkeys = nestedObject.keys();
while (keys.hasNext()) {
String nestedKey = keys.next();
result.put(key + separator + nestedKey, nestedObject.get(nestedKey));
}
} else if (value instanceof JSONArray) {
JSONArray array = (JSONArray) value;
for (int i = 0; i< array.length(); i++) {
Object item = array.get(i);
if (item instanceof JSONObject) {
JSONObject nestedObject = flattenJSON((JSONObject) item, separator);
Iteratorkeys = nestedObject.keys();
while (keys.hasNext()) {
String nestedKey = keys.next();
result.put(key + "[" + i + "]" + separator + nestedKey, nestedObject.get(nestedKey));
}
} else {
result.put(key + "[" + i + "]", item);
}
}
} else {
result.put(key, value);
}
}
return result;
}
上面的代碼中,flattenJSON()方法接收一個JSONObject對象和一個屬性名分隔符(separator),然后通過JSON對象的keys()方法迭代所有的屬性值和屬性名,如果屬性值為JSONObject類型,則遞歸調用flattenJSON()方法;如果屬性值是JSONArray類型,則遍歷JSONArray中的每個元素,如果元素是JSONObject類型,則遞歸調用flattenJSON()方法。
最后,遞歸返回單層的JSON對象,即扁平化后的JSON對象。