From a937d130869c23cfe8d2c638ae4ff4fcfbbab0de Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Sat, 5 Feb 2011 21:09:49 +0100 Subject: [PATCH] Added reflection-support for stringifyJson. --- src/main/java/org/dynmap/web/Json.java | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/main/java/org/dynmap/web/Json.java b/src/main/java/org/dynmap/web/Json.java index d59d817d..43a6b003 100644 --- a/src/main/java/org/dynmap/web/Json.java +++ b/src/main/java/org/dynmap/web/Json.java @@ -1,5 +1,7 @@ package org.dynmap.web; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.LinkedHashMap; import java.util.List; @@ -40,6 +42,35 @@ public class Json { } sb.append("]"); return sb.toString(); + } else if (o instanceof Object) /* TODO: Always true, maybe interface? */ { + StringBuilder sb = new StringBuilder(); + sb.append("{"); + boolean first = true; + + Class c = o.getClass(); + for(Field field : c.getFields()) { + if (!Modifier.isPublic(field.getModifiers())) + continue; + String fieldName = field.getName(); + Object fieldValue; + try { + fieldValue = field.get(o); + } catch (IllegalArgumentException e) { + continue; + } catch (IllegalAccessException e) { + continue; + } + + if (first) + first = false; + else + sb.append(","); + sb.append(stringifyJson(fieldName)); + sb.append(": "); + sb.append(stringifyJson(fieldValue)); + } + sb.append("}"); + return sb.toString(); } else { return "undefined"; }