Dies mag eine dumme Frage sein, aber was ist der einfachste Weg, JSON von einer URL in Java zu lesen und zu analysieren ?
In Groovy geht es nur um wenige Codezeilen. Java-Beispiele, die ich finde, sind lächerlich lang (und haben einen riesigen Block für die Ausnahmebehandlung).
Ich möchte nur den Inhalt dieses Links lesen .
json_decode(file_get_contents($url));
und fertig ist!Antworten:
Mit dem Maven-Artefakt habe
org.json:json
ich den folgenden Code erhalten, der meiner Meinung nach ziemlich kurz ist. Nicht so kurz wie möglich, aber immer noch verwendbar.quelle
readLine
Funktion führt dann die Schleife durch, und ich muss die Zeilen anstelle der Zeichen verketten, was teurer ist. Das würde den Code nicht so kurz halten wie jetzt. Darüber hinaus gibt es in der JSON-Notation kein Konzept für "Linien". Warum sollte ich sie also als solche lesen?IOUtils.toString(InputStream)
Methode von Apache Commons-Io . Das sollte Ihnen einige Zeilen und Verantwortung ersparen.InputStream
. Während der obige Code für dieorg.json
Verwendung kurz sein kann, stellen Sie sicher, dass Sie andere verfügbare Bibliotheken überprüfen. Für diese Aufgabe müssen nicht mehr als 1-3 Codezeilen geschrieben werden.Hier sind einige alternative Versionen mit Jackson (da es mehrere Möglichkeiten gibt, Daten zu erhalten):
Und speziell der übliche Fall (IMO), in dem Sie sich mit Java-Objekten befassen möchten, kann zu einem einzigen Liner gemacht werden:
Andere Bibliotheken wie Gson unterstützen ebenfalls einzeilige Methoden. Warum viele Beispiele viel längere Abschnitte zeigen, ist seltsam. Und noch schlimmer ist, dass viele Beispiele die veraltete Bibliothek org.json verwenden. Es war vielleicht das erste, was es gab, aber es gibt ein halbes Dutzend bessere Alternativen, so dass es kaum einen Grund gibt, es zu verwenden.
quelle
java.net.URL
aber irgendein man arbeitet, sowie viele andere Quellen (File
,InputStream
,Reader
,String
).String
die Übergabe muss der Inhalt JSON sein und nicht die Textcodierung der zu verwendenden URI / URL.Der einfachste Weg: Verwenden Sie gson, Googles eigene goto json-Bibliothek. https://code.google.com/p/google-gson/
Hier ist ein Beispiel. Ich gehe auf diese kostenlose Geolocator-Website und analysiere den JSON und zeige meine Postleitzahl an. (Setzen Sie dieses Zeug einfach in eine Hauptmethode, um es zu testen)
quelle
rootobj.get("zip_code").getAsString();
Wenn es Ihnen nichts ausmacht, ein paar Bibliotheken zu verwenden, können Sie dies in einer einzigen Zeile tun.
Schließen Sie Apache Commons IOUtils & json.org- Bibliotheken ein.
quelle
Verwenden Sie HttpClient , um den Inhalt der URL abzurufen. Verwenden Sie dann die Bibliothek von json.org , um den JSON zu analysieren. Ich habe diese beiden Bibliotheken in vielen Projekten verwendet und sie waren robust und einfach zu bedienen.
Ansonsten können Sie versuchen, eine Facebook-API-Java-Bibliothek zu verwenden. Ich habe keine Erfahrung in diesem Bereich, aber es gibt eine Frage zum Stapelüberlauf im Zusammenhang mit der Verwendung einer Facebook-API in Java . Möglicherweise möchten Sie RestFB als eine gute Wahl für eine Bibliothek betrachten.
quelle
Ich habe den JSON-Parser auf einfachste Weise erstellt, hier ist er
Diese Klasse gibt das JSON-Objekt von der URL zurück
und wenn Sie das json-Objekt möchten, rufen Sie einfach diese Klasse und die Methode in Ihrer Activity-Klasse auf
Mein Code ist hier
Hier wird der "JSON-Schlüssel" als der Schlüssel in Ihrer JSON-Datei bezeichnet
Dies ist ein einfaches Beispiel für eine JSON-Datei
Hier ist "json" der Schlüssel und "hi" der Wert
Dadurch wird Ihr JSON-Wert zum String-Inhalt.
quelle
Mit Jersey-Client ist es sehr einfach, nur diese Maven-Abhängigkeit einzuschließen:
Rufen Sie es dann anhand dieses Beispiels auf:
Verwenden Sie dann Gson von Google, um den JSON zu analysieren:
quelle
Ich habe festgestellt, dass dies bei weitem der einfachste Weg ist.
Verwenden Sie diese Methode:
Und benutze es so:
quelle
Ich bin nicht sicher, ob dies effizient ist, aber dies ist einer der möglichen Wege:
Lesen Sie json aus der URL-Verwendung
url.openStream()
und lesen Sie den Inhalt in eine Zeichenfolge.Erstellen Sie ein JSON-Objekt mit dieser Zeichenfolge (mehr unter json.org ).
quelle
Ich wollte hier eine aktualisierte Antwort hinzufügen, da (etwas) die jüngsten Aktualisierungen des JDK das Lesen des Inhalts einer HTTP-URL etwas erleichtert haben. Wie bereits erwähnt, müssen Sie für die Analyse weiterhin eine JSON-Bibliothek verwenden, da das JDK derzeit keine enthält. Hier sind einige der am häufigsten verwendeten JSON-Bibliotheken für Java:
Um JSON von einer URL abzurufen, scheint dies der einfachste Weg zu sein, ausschließlich JDK-Klassen zu verwenden (aber wahrscheinlich nicht etwas, das Sie für große Nutzdaten tun möchten). Java 9 führte Folgendes ein: https://docs.oracle.com/en/ java / javase / 11 / docs / api / java.base / java / io / InputStream.html # readAllBytes ()
Zum Beispiel zum Parsen des JSON mithilfe der GSON-Bibliothek
quelle
Hier finden Sie eine vollständige Auswahl zum Parsen von Json-Inhalten. In diesem Beispiel wird die Statistik der Android-Versionen verwendet ( hier im Quellcode von Android Studio zu finden , der hier verlinkt ist ).
Kopieren Sie die Datei "Distributions.json", die Sie von dort erhalten, als Fallback in res / raw.
build.gradle
Manifest
MainActivity.kt
Alternativ zur Abhängigkeit können Sie stattdessen auch Folgendes verwenden:
und der Fallback:
Das Ergebnis dieser Ausführung:
quelle