試したコードの一部
Java 17
// JSON文字列
String jsonString = """
{
"b": "value_b",
"a": "value_a",
"c": null
}
""";
JSONObject jsonObject = new JSONObject(jsonString);
// nullを空文字に置き換え
for (String key : jsonObject.keySet()) {
if (jsonObject.isNull(key)) {
jsonObject.put(key, ""); // 空文字に置き換え
}
}
// XMLに変換
String xml = XML.toString(jsonObject);
// 空要素形式 (<タグ/>) を置換して (<タグ></タグ>) に変更
xml = xml.replaceAll("<(\\w+)/>", "<$1></$1>");
// 結果を表示
System.out.println(xml);
結果
<a>value_a</a><b>value_b</b><c></c>
JSON を XML に変換する際に、値が null または空の場合にタグを削除
// JSON文字列
String jsonString = """
{
"name": "John",
"age": null,
"address": "",
"city": "Tokyo"
}
""";
JSONObject jsonObject = new JSONObject(jsonString);
// 値がnullまたは空のキーを削除
removeEmptyValues(jsonObject);
// XMLに変換
String xml = XML.toString(jsonObject);
// 結果を表示
System.out.println(xml);
private static void removeEmptyValues(JSONObject jsonObject) {
// JSONのキーを反復処理するためのIteratorを取得
Iterator<String> keys = jsonObject.keys();
// Iteratorを使って安全にキーを削除
while (keys.hasNext()) {
String key = keys.next();
Object value = jsonObject.get(key);
// nullまたは空文字列の場合にキーを削除
if (value == JSONObject.NULL || (value instanceof String && ((String) value).isEmpty())) {
keys.remove(); // Iterator経由で削除
}
}
}
結果
<city>Tokyo</city><name>John</name>