test 文件内容:
{ "user": { "code": "U-0000000001", "methods": [ {}, {} ], "methods2": { "marr": [], "marr2": [1,2,3] } }, "testNull": null, "department": [ [ [ { "name": "layer-map-3" } ], [ "layer-array-3" ], [ 33333, 3.333 ] ] ] }
====
java 代码实现方式1:
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.io.BufferedReader; import java.io.FileReader; import java.util.HashSet; public class Main { public static void main(String[] args) throws Exception { String jsonStr = getJsonStrFromFile(); Gson gson = new GsonBuilder().create(); JsonElement jsonElement = gson.fromJson(jsonStr, JsonElement.class); removeEmptyElements(jsonElement); String resultJson = gson.toJson(jsonElement); System.out.println(jsonStr); System.out.println(resultJson); } private static boolean removeEmptyElements(JsonElement element) { if (element.isJsonObject()) { JsonObject obj = element.getAsJsonObject(); for (String key : new HashSet<>(obj.keySet())) { JsonElement value = obj.get(key); // delete null if (value == null || value.isJsonNull()) { obj.remove(key); } else if (value.isJsonArray()) { if (!removeEmptyElements(value)) { // delete it when its children.size() == 0 obj.remove(key); } } else if (value.isJsonObject()) { if (!removeEmptyElements(value)) { obj.remove(key); } } } // return parent loop to judge return obj.size() > 0; } else if (element.isJsonArray()) { JsonArray array = element.getAsJsonArray(); for (int i = 0; i < array.size(); i++) { JsonElement value = array.get(i); if (value == null || value.isJsonNull()) { array.remove(i); // Adjust index after removal i--; } else if (value.isJsonArray()) { if (!removeEmptyElements(value)) { array.remove(i); // Adjust index after removal i--; } } else if (value.isJsonObject()) { if (!removeEmptyElements(value)) { array.remove(i); // Adjust index after removal i--; } } } // return parent loop to judge return array.size() > 0; } return true; } public static String getJsonStrFromFile() throws Exception { String filePath = "c:\\test"; BufferedReader br = new BufferedReader(new FileReader(filePath)); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } br.close(); return sb.toString(); } }