Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I want to
convert
HashMap
to
json array
my code is as follow:
Map<String, String> map = new HashMap<String, String>();
map.put("first", "First Value");
map.put("second", "Second Value");
I have tried this but it didn't work. Any solution?
JSONArray mJSONArray = new JSONArray(Arrays.asList(map));
–
–
–
–
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()+"]");
–
–
–
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");
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;
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"
–
–
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);
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
).
–
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.