it-swarm.com.de

Wie konvertiert man HashMap in json Array in Android?

Ich möchte konvertieren HashMap zu JSON-Arraymein Code lautet wie folgt:

Map<String, String> map = new HashMap<String, String>();

map.put("first", "First Value");

map.put("second", "Second Value");

Ich habe es versucht, aber es hat nicht funktioniert . Irgendeine Lösungsmöglichkeit?

JSONArray mJSONArray = new JSONArray(Arrays.asList(map));
15
Sandeep

Versuche dies,

public JSONObject (Map copyFrom) 

Erstellt ein neues JSONObject, indem alle Name/Wert-Zuordnungen aus der angegebenen Map kopiert werden.

Parameter CopyAus einer Map, deren Schlüssel vom Typ String sind und deren Werte unterstützte Typen sind. 

Löst NullPointerException aus, wenn einer der Schlüssel der Map null ist. 

Grundnutzung:

JSONObject obj=new JSONObject(yourmap);

Holen Sie sich das Json-Array aus dem JSONObject

Bearbeiten:

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

Editieren: (Wenn Ausnahme gefunden wird, kannst du den Kommentar unter @ krb686 ändern)

JSONArray array=new JSONArray("["+obj.toString()+"]");
41
Pragnani

Seit dem androiad API Lvl 19 können Sie einfach new JSONObject(new HashMap()) ausführen. Bei älteren API-Levels erhalten Sie jedoch ein unschönes Ergebnis (wenden Sie einfach toString auf jeden nicht primitiven Wert an).

Ich habe Methoden von JSONObject und JSONArray gesammelt, um das Ergebnis zu vereinfachen und zu einem schönen Ergebnis zu führen. Sie können meine Lösungsklasse verwenden:

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;
    }
}

Wenn Sie dann die mapToJson () -Methode auf Ihre Map anwenden, können Sie ein Ergebnis wie folgt erhalten:

{
  "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"
  }
}
13
senneco

Eine Zuordnung besteht aus Schlüssel/Wert-Paaren, d. H. Zwei Objekten für jeden Eintrag, während eine Liste nur ein einzelnes Objekt für jeden Eintrag enthält. Was Sie tun können, ist, alle Map.Entry <K, V> zu extrahieren und sie dann in das Array einzufügen:

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

Alternativ ist es manchmal nützlich, die Schlüssel oder der Werte in eine Sammlung zu extrahieren:

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

oder

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

Hinweis: Wenn Sie die Tasten keys als Einträge verwenden, wird die Reihenfolge nicht garantiert (die Methode keySet() gibt eine Variable Set zurück). Das liegt daran, dass die Map-Schnittstelle keine Reihenfolge angibt (es sei denn, die Map ist zufällig eine SortedMap). 

3
matsev

Sie können verwenden

JSONArray jarray = JSONArray.fromObject(map );

1
Varun

Dies ist die einfachste Methode. 

Benutz einfach 

JSONArray jarray = new JSONArray(hashmapobject.toString);
0
ImMathan