import org.json.JSONObject;
import org.json.JSONArray;
import java.util.HashMap;
import java.util.Map;
class DOMSerializer {
public static String serialize(Object obj) {
if (obj == null) {
return "null";
}
if (obj instanceof String) {
return "\"" + ((String) obj).replace("\\", "\\\\").replace("\"", "\\\""); + "\""; // Escape special chars
}
if (obj instanceof Number) {
return String.valueOf(obj);
}
if (obj instanceof Boolean) {
return String.valueOf((Boolean) obj);
}
if (obj instanceof Map) {
Map<String, Object> map = (Map<String, Object>) obj;
JSONArray jsonArray = new JSONArray();
for (Map.Entry<String, Object> entry : map.entrySet()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(entry.getKey(), serialize(entry.getValue()));
jsonArray.put(jsonObject);
}
return jsonArray.toString();
}
if (obj instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) obj;
JSONObject jsonObject = new JSONObject();
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject.put(String.valueOf(i), serialize(jsonArray.get(i)));
}
return jsonObject.toString();
}
// Handle DOM element objects directly. Assume they have a 'tagName' and 'attributes'
if (obj instanceof DOMElement) {
DOMElement element = (DOMElement) obj;
JSONObject jsonObject = new JSONObject();
jsonObject.put("tagName", element.tagName);
Map<String, String> attributes = new HashMap<>();
for (String key : element.attributes.keySet()) {
attributes.put(key, element.attributes.get(key));
}
jsonObject.put("attributes", attributes);
return jsonObject.toString();
}
return "null"; // Default case
}
public static void main(String[] args) {
// Example Usage & CLI Interface
if (args.length < 1) {
System.out.println("Usage: java DOMSerializer <DOMElement> [other arguments]");
System.out.println(" (DOMElement should be an instance of the DOMElement class)");
return;
}
Object obj = args[0]; // The DOM element to serialize
String serializedString = serialize(obj);
System.out.println(serializedString);
}
}
class DOMElement {
String tagName;
Map<String, String> attributes;
public DOMElement(String tagName, Map<String, String> attributes) {
this.tagName = tagName;
this.attributes = attributes;
}
}
Add your comment