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));
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()+"]");
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"
}
}
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
).
Sie können verwenden
JSONArray jarray = JSONArray.fromObject(map );
Dies ist die einfachste Methode.
Benutz einfach
JSONArray jarray = new JSONArray(hashmapobject.toString);