package gargl.utilities;
import java.util.LinkedList;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class JsonUtils {
/**
* @param element
* The element to search within for a JsonElement named
* elementName
* @param elementName
* The name of the element to find
* @return The element named 'elementName' that is a child of 'element'
*/
public static JsonElement findElement(JsonElement element,
String elementName) {
if(element == null){
return null;
}
Queue<JsonElement> stack = new LinkedList<JsonElement>();
stack.add(element);
return search(stack, elementName);
}
private static JsonElement search(Queue<JsonElement> queue, String elementName) {
JsonElement ret = null;
while (queue.size() > 0) {
JsonElement element = queue.poll();
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject();
Set<Entry<String, JsonElement>> members = object.entrySet();
for (Entry<String, JsonElement> member : members) {
if (member.getKey().equals(elementName)) {
return member.getValue();
} else {
queue.add(member.getValue());
}
}
} else if (element.isJsonArray()) {
JsonArray array = element.getAsJsonArray();
for (JsonElement array_element : array) {
queue.add(array_element);
}
}
}
return ret;
}
public static JsonObject asJsonObject(JsonElement element) {
if (element.isJsonObject()) {
return element.getAsJsonObject();
} else {
return null;
}
}
public static JsonArray asJsonArray(JsonElement element) {
if (element.isJsonArray()) {
return element.getAsJsonArray();
} else {
return null;
}
}
}