Nein, es ist richtig, weil ich ein json-Objekt aus einem json-String erstellen wollte. Die Antwort von dogbane zeigte den richtigen Weg, um zu antworten.
Herr Sajid Shaikh
Beide Antworten von Mappan und Dogbane sind richtig, verwenden jedoch unterschiedliche Module. Sie sollten darauf achten, für jedes Modul das richtige Modul zu importieren, da es viele JSONObject-Module gibt.
Arashsoft
Ich habe es mit der GSON-Bibliothek versucht. Bitte überprüfen Sie diesen Link .
Und können Sie bitte angeben, welches Paket für dasselbe importiert werden soll?
Gonephishing
10
Dies funktioniert für mich mit:import org.json.simple.JSONObject
Mafro34
1
Version 1.1.1 von json-simple scheint ein Problem zu haben. Das obige gibt "Unhandled Exception" für parser.parse(und will Try-Catch oder Würfe. Wenn Sie jedoch einen hinzufügen, wird ein Unhandled exception type ParseExceptionFehler oder ein NoClassDefFound-Fehler für ParseException ausgegeben, org.json.simple.parserselbst wenn Sie in Maven- Abhängigkeiten json-simple haben und in der Bibliothek des Projekts deutlich sichtbar sind.
Juha Untinen
2
org.json ist eine Proof-of-Concept-Bibliothek. Es ist eines der schlechtesten in Bezug auf Leistung und Funktionen. Man sollte sich vor der Auswahl den Funktionsumfang und die Leistung einer json lib ansehen. Sehen Sie sich diesen Benchmark an, den ich mit JMH durchgeführt habe: github.com/fabienrenaud/java-json-benchmark Er zeigt Jackson deutlich schneller als alles andere und 5- bis 6-mal schneller als org.json.
"Wenn Sie auf Client-Seite verarbeiten möchten, hängt dies von Ihrer Programmiersprache ab. Mit Java können Sie beispielsweise google-gson verwenden." Ich denke, Sie haben dort wahrscheinlich "Server" statt "Client" gemeint. Und er hat seine Frage mit "Java" markiert.
TJ Crowder
+1. Ich habe Gson jetzt in 4-5 Projekten verwendet, in ganz unterschiedlichen Kontexten, auf Server- und Clientseite (auch in der Android-App), und es hat mich nie im Stich gelassen. Sehr schöne und saubere Bibliothek.
Jonik
Wenn Sie gson verwenden möchten, aber keine vordefinierte POJO-Klasse haben (dh Sie haben einen generischen json ohne vordefinierte Struktur), kann diese Antwort hilfreich sein - stackoverflow.com/questions/4110664/…
Leandro David
40
Es gibt verschiedene Java JSON-Serializer und Deserializer, die über die JSON-Homepage verlinkt sind .
Ich denke jedoch, dass Ihre Frage eher wie folgt lautet: Wie erhalte ich ein tatsächliches JSONObject-Objekt aus einer JSON-Zeichenfolge?
Ich habe mir die Google-JSON-API angesehen und konnte nichts so einfaches finden wie die API von org.json. Dies ist wahrscheinlich das, was Sie verwenden möchten, wenn Sie ein Barebone-JSONObject so dringend benötigen.
Ich denke, das Schöne an Google-Gson ist, dass Sie sich nicht mit JSONObject befassen müssen. Sie greifen einfach zu json, übergeben die Klasse, in die Sie deserialisieren möchten, und Ihre Klassenattribute werden mit dem JSON abgeglichen. Andererseits hat jeder seine eigenen Anforderungen. Vielleicht können Sie sich den Luxus nicht leisten, vorab zugeordnete Klassen zu haben die deserialisierende Seite, weil die Dinge auf der JSON-generierenden Seite möglicherweise zu dynamisch sind. In diesem Fall verwenden Sie einfach json.org.
(2) Konvertieren Sie den JSON-String in ein JSON-Objekt (JsonNode).
publicstaticJsonNode stringToJSONObject(String jsonString)throwsException{ObjectMapper jacksonObjMapper =newObjectMapper();return jacksonObjMapper.readTree(jsonString);}//Example:String jsonString ="{\"phonetype\":\"N95\",\"cat\":\"WP\"}";JsonNode jsonNode = stringToJSONObject(jsonString);Assert.assertEquals("Phonetype value not legit!","N95", jsonNode.get("phonetype").getTextValue());Assert.assertEquals("Cat value is tragic!","WP", jsonNode.get("cat").getTextValue());
HINWEIS: GSON beim Deserialisieren einer Schnittstelle führt zu einer Ausnahme wie unten.
"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."
Während deserialisieren; GSON weiß nicht, welches Objekt für diese Schnittstelle intantiert werden muss.
Jetzt objist Ihre konvertierte JSONObjectForm Ihres jeweiligen Strings. Dies ist der Fall, wenn Sie Name-Wert-Paare haben.
Für eine Zeichenfolge können Sie direkt an den Konstruktor von übergeben JSONObject. Wenn es gültig ist json String, dann okay, sonst wird eine Ausnahme ausgelöst.
user.put("email", "[email protected]")Wenn Sie buchstäblich das tun, was Sie geschrieben haben, wird eine unbehandelte Ausnahme ausgelöst.
Sebastialonso
1
@Sebastialonso Ja, Sie müssen die Ausnahme abfangen. So:try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}
TheLittleNaruto
@vidya Nein, ist es nicht. Betrachten Sie es noch einmal zu vergleichen.
Antworten:
Verwenden der org.json- Bibliothek:
quelle
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
An alle, die noch nach einer Antwort suchen:
quelle
import org.json.simple.JSONObject
parser.parse(
und will Try-Catch oder Würfe. Wenn Sie jedoch einen hinzufügen, wird einUnhandled exception type ParseException
Fehler oder ein NoClassDefFound-Fehler für ParseException ausgegeben,org.json.simple.parser
selbst wenn Sie in Maven- Abhängigkeiten json-simple haben und in der Bibliothek des Projekts deutlich sichtbar sind.Sie können verwenden
google-gson
. Einzelheiten:Objektbeispiele
(Serialisierung)
Beachten Sie, dass Sie Objekte mit Zirkelverweisen nicht serialisieren können, da dies zu einer unendlichen Rekursion führt.
(Deserialisierung)
Ein weiteres Beispiel für Gson:
Gson ist leicht zu erlernen und zu implementieren. Sie müssen die folgenden zwei Methoden kennen:
-> toJson () - Konvertiert das Java-Objekt in das JSON-Format
-> fromJson () - JSON in Java-Objekt konvertieren
Ausgabe
Ressourcen:
Startseite des Google Gson-Projekts
Gson Benutzerhandbuch
Beispiel
quelle
Es gibt verschiedene Java JSON-Serializer und Deserializer, die über die JSON-Homepage verlinkt sind .
Zum jetzigen Zeitpunkt gibt es diese 22:
... aber natürlich kann sich die Liste ändern.
quelle
Java 7-Lösung
;;
quelle
Zur Umrechnung
String
in dieJSONObject
Sie gerade die brauchen passierenString
Instanz in Constructor vonJSONObject
.Z.B:
quelle
Ich benutze dafür gerne Google-Gson, und das liegt genau daran, dass ich nicht direkt mit JSONObject arbeiten muss.
In diesem Fall hätte ich eine Klasse, die den Eigenschaften Ihres JSON-Objekts entspricht
Ich denke jedoch, dass Ihre Frage eher wie folgt lautet: Wie erhalte ich ein tatsächliches JSONObject-Objekt aus einer JSON-Zeichenfolge?
Ich habe mir die Google-JSON-API angesehen und konnte nichts so einfaches finden wie die API von org.json. Dies ist wahrscheinlich das, was Sie verwenden möchten, wenn Sie ein Barebone-JSONObject so dringend benötigen.
http://www.json.org/javadoc/org/json/JSONObject.html
Mit org.json.JSONObject (eine andere völlig andere API) Wenn Sie so etwas wie ...
Ich denke, das Schöne an Google-Gson ist, dass Sie sich nicht mit JSONObject befassen müssen. Sie greifen einfach zu json, übergeben die Klasse, in die Sie deserialisieren möchten, und Ihre Klassenattribute werden mit dem JSON abgeglichen. Andererseits hat jeder seine eigenen Anforderungen. Vielleicht können Sie sich den Luxus nicht leisten, vorab zugeordnete Klassen zu haben die deserialisierende Seite, weil die Dinge auf der JSON-generierenden Seite möglicherweise zu dynamisch sind. In diesem Fall verwenden Sie einfach json.org.
quelle
Sie müssen org.json importieren
quelle
String zu JSON Verwendung
Jackson
mitcom.fasterxml.jackson.databind
:Angenommen, Ihre JSON-Zeichenfolge lautet wie folgt: jsonString = {"phonetype": "N95", "cat": "WP"}
quelle
Wenn Sie http://json-lib.sourceforge.net verwenden (net.sf.json.JSONObject)
es ist ziemlich einfach:
oder
Holen Sie sich die Werte dann mit json.getString (param), json.getInt (param) und so weiter.
quelle
Eine Zeichenfolge in json und den Stich umzuwandeln ist wie json. {"Phonetyp": "N95", "Katze": "WP"}
quelle
Verwenden Sie JsonNode von schnellerxml für das generische Json-Parsing. Es wird intern eine Karte mit Schlüsselwerten für alle Eingaben erstellt.
Beispiel:
Eingabezeichenfolge:
quelle
Keine Notwendigkeit, eine externe Bibliothek zu verwenden.
Sie können diese Klasse stattdessen verwenden :) (behandelt gerade Listen, verschachtelte Listen und JSON)
Verwenden Sie Folgendes, um Ihre JSON-Zeichenfolge in eine Hashmap zu konvertieren :
quelle
Codehaus Jackson - Ich bin seit 2012 diese großartige API für meine RESTful-Webservice- und JUnit-Tests. Mit ihrer API können Sie:
(1) Konvertieren Sie den JSON-String in eine Java-Bean
(2) Konvertieren Sie den JSON-String in ein JSON-Objekt (JsonNode).
(3) Konvertieren Sie Java Bean in JSON String
REFS:
Codehaus Jackson
JsonNode-API - Verwenden, Navigieren, Analysieren und Auswerten von Werten aus einem JsonNode-Objekt
Tutorial - Einfaches Tutorial zur Verwendung von Jackson zum Konvertieren von JSON-Zeichenfolgen in JsonNode
quelle
HINWEIS: GSON beim Deserialisieren einer Schnittstelle führt zu einer Ausnahme wie unten.
Während deserialisieren; GSON weiß nicht, welches Objekt für diese Schnittstelle intantiert werden muss.
Dies ist hier irgendwie gelöst .
Jedoch FlexJSON hat diese Lösung von Natur aus . Während der Serialisierung wird der Klassenname als Teil von json wie unten hinzugefügt.
Also wird JSON einige belasten; Sie müssen jedoch nicht schreiben,
InstanceCreator
was in GSON erforderlich ist.quelle
Verwenden von org.json
Wenn Sie eine Zeichenfolge mit Text im JSON-Format haben, können Sie das JSON-Objekt mithilfe der folgenden Schritte abrufen:
Nun können Sie auf den Phonetyp zugreifen
quelle
Zum Setzen von json single object auf list dh
in zu
List<Location>
verwenden
jackson.mapper-asl-1.9.7.jar
quelle
quelle
Besser Gehen Sie mit
org.json
lib auf einfachere Weise . Gehen Sie einfach wie folgt vor:Jetzt
obj
ist Ihre konvertierteJSONObject
Form Ihres jeweiligen Strings. Dies ist der Fall, wenn Sie Name-Wert-Paare haben.Für eine Zeichenfolge können Sie direkt an den Konstruktor von übergeben
JSONObject
. Wenn es gültig istjson String
, dann okay, sonst wird eine Ausnahme ausgelöst.quelle
user.put("email", "[email protected]")
Wenn Sie buchstäblich das tun, was Sie geschrieben haben, wird eine unbehandelte Ausnahme ausgelöst.try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}