From d43ae0b41b1d8290b4f7b28988b88ad80bc9d27c Mon Sep 17 00:00:00 2001 From: Mehmet Fidanboylu Date: Sat, 6 Jan 2018 14:32:00 -0800 Subject: [PATCH] Add unwrap to JSONUtil (#4491) We have a use for this for the internal messaging plugin. Instead of rolling our own, it made sense to add it here especially since it has the mirror functionality (wrap). --- .../io/flutter/plugin/common/JSONUtil.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/shell/platform/android/io/flutter/plugin/common/JSONUtil.java b/shell/platform/android/io/flutter/plugin/common/JSONUtil.java index 12cb9d179..628002829 100644 --- a/shell/platform/android/io/flutter/plugin/common/JSONUtil.java +++ b/shell/platform/android/io/flutter/plugin/common/JSONUtil.java @@ -1,7 +1,10 @@ package io.flutter.plugin.common; import java.lang.reflect.Array; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; +import java.util.HashMap; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; @@ -9,6 +12,49 @@ import org.json.JSONObject; public class JSONUtil { private JSONUtil() { } + + /** + * Convert the Json java representation to Java objects. Particularly used for converting + * JSONArray and JSONObject to Lists and Maps. + */ + public static Object unwrap(Object o) { + if (JSONObject.NULL.equals(o) || o == null) { + return null; + } + if (o instanceof Boolean + || o instanceof Byte + || o instanceof Character + || o instanceof Double + || o instanceof Float + || o instanceof Integer + || o instanceof Long + || o instanceof Short + || o instanceof String) { + return o; + } + try { + if (o instanceof JSONArray) { + List list = new ArrayList<>(); + JSONArray array = (JSONArray) o; + for (int i = 0; i < array.length(); i++) { + list.add(unwrap(array.get(i))); + } + return list; + } + if (o instanceof JSONObject) { + Map map = new HashMap<>(); + JSONObject jsonObject = (JSONObject) o; + Iterator keyIterator = jsonObject.keys(); + while (keyIterator.hasNext()) { + String key = keyIterator.next(); + map.put(key, unwrap(jsonObject.get(key))); + } + return map; + } + } catch (Exception ignored) { + } + return null; + } /** * Backport of {@link JSONObject#wrap(Object)} for use on pre-KitKat -- GitLab