How to convert HashMap to json Array in android?

后端 未结 5 525
陌清茗
陌清茗 2020-12-03 03:20

I want to convert HashMap to json array my code is as follow:

Map map = new HashMap();

map.put(         


        
相关标签:
5条回答
  • 2020-12-03 03:47

    This is the Simplest Method.

    Just use

    JSONArray jarray = new JSONArray(hashmapobject.toString);
    
    0 讨论(0)
  • 2020-12-03 03:55

    Since androiad API Lvl 19, you can simply do new JSONObject(new HashMap()). But on older API lvls you get ugly result(simple apply toString to each non-primitive value).

    I collected methods from JSONObject and JSONArray for simplify and beautifully result. You can use my solution class:

    package you.package.name;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.lang.reflect.Array;
    import java.util.Collection;
    import java.util.Map;
    
    public class JsonUtils
    {
        public static JSONObject mapToJson(Map<?, ?> data)
        {
            JSONObject object = new JSONObject();
    
            for (Map.Entry<?, ?> entry : data.entrySet())
            {
                /*
                 * Deviate from the original by checking that keys are non-null and
                 * of the proper type. (We still defer validating the values).
                 */
                String key = (String) entry.getKey();
                if (key == null)
                {
                    throw new NullPointerException("key == null");
                }
                try
                {
                    object.put(key, wrap(entry.getValue()));
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }
    
            return object;
        }
    
        public static JSONArray collectionToJson(Collection data)
        {
            JSONArray jsonArray = new JSONArray();
            if (data != null)
            {
                for (Object aData : data)
                {
                    jsonArray.put(wrap(aData));
                }
            }
            return jsonArray;
        }
    
        public static JSONArray arrayToJson(Object data) throws JSONException
        {
            if (!data.getClass().isArray())
            {
                throw new JSONException("Not a primitive data: " + data.getClass());
            }
            final int length = Array.getLength(data);
            JSONArray jsonArray = new JSONArray();
            for (int i = 0; i < length; ++i)
            {
                jsonArray.put(wrap(Array.get(data, i)));
            }
    
            return jsonArray;
        }
    
        private static Object wrap(Object o)
        {
            if (o == null)
            {
                return null;
            }
            if (o instanceof JSONArray || o instanceof JSONObject)
            {
                return o;
            }
            try
            {
                if (o instanceof Collection)
                {
                    return collectionToJson((Collection) o);
                }
                else if (o.getClass().isArray())
                {
                    return arrayToJson(o);
                }
                if (o instanceof Map)
                {
                    return mapToJson((Map) o);
                }
                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;
                }
                if (o.getClass().getPackage().getName().startsWith("java."))
                {
                    return o.toString();
                }
            }
            catch (Exception ignored)
            {
            }
            return null;
        }
    }
    

    Then if you apply mapToJson() method to your Map, you can get result like this:

    {
      "int": 1,
      "Integer": 2,
      "String": "a",
      "int[]": [1,2,3],
      "Integer[]": [4, 5, 6],
      "String[]": ["a","b","c"],
      "Collection": [1,2,"a"],
      "Map": {
        "b": "B",
        "c": "C",
        "a": "A"
      }
    }
    
    0 讨论(0)
  • 2020-12-03 04:01

    A map consists of key / value pairs, i.e. two objects for each entry, whereas a list only has a single object for each entry. What you can do is to extract all Map.Entry<K,V> and then put them in the array:

    Set<Map.Entry<String, String> entries = map.entrySet();
    JSONArray mJSONArray = new JSONArray(entries);
    

    Alternatively, sometimes it is useful to extract the keys or the values to a collection:

    Set<String> keys = map.keySet();
    JSONArray mJSONArray = new JSONArray(keys);
    

    or

    List<String> values = map.values();
    JSONArray mJSONArray = new JSONArray(values);
    

    Note: If you choose to use the keys as entries, the order is not guaranteed (the keySet() method returns a Set). That is because the Map interface does not specify any order (unless the Map happens to be a SortedMap).

    0 讨论(0)
  • 2020-12-03 04:02

    Try this,

    public JSONObject (Map copyFrom) 
    

    Creates a new JSONObject by copying all name/value mappings from the given map.

    Parameters copyFrom a map whose keys are of type String and whose values are of supported types.

    Throws NullPointerException if any of the map's keys are null.

    Basic usage:

    JSONObject obj=new JSONObject(yourmap);
    

    get the json array from the JSONObject

    Edit:

    JSONArray array=new JSONArray(obj.toString());
    

    Edit:(If found Exception then You can change as mention in comment by @krb686)

    JSONArray array=new JSONArray("["+obj.toString()+"]");
    
    0 讨论(0)
  • 2020-12-03 04:04

    You can use

    JSONArray jarray = JSONArray.fromObject(map );

    0 讨论(0)
提交回复
热议问题