Angenommen, ich habe eine Datei mit JSON-Inhalten im Rohressourcenordner meiner App. Wie kann ich dies in die App einlesen, damit ich den JSON analysieren kann?
85
Siehe openRawResource . So etwas sollte funktionieren:
InputStream is = getResources().openRawResource(R.raw.json_file);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
String jsonString = writer.toString();
\res\json_file.json
Ordner oder drinnen\res\raw\json_file.json
?getResources()
man anrufen? Wohin soll die Rohressourcendatei gehen? Welche Konvention sollten Sie befolgen, um sicherzustellen, dass die Build-Tools erstellt werdenR.raw.json_file
?Kotlin ist jetzt die offizielle Sprache für Android, daher denke ich, dass dies für jemanden nützlich wäre
quelle
Ich habe die Antwort von @ kabuko verwendet, um ein Objekt zu erstellen, das aus einer JSON-Datei mit Gson aus den Ressourcen geladen wird:
Um es zu verwenden, würden Sie Folgendes tun (das Beispiel befindet sich in einem
InstrumentationTestCase
):quelle
implementation 'com.google.code.gson:gson:2.8.5'
Von http://developer.android.com/guide/topics/resources/providing-resources.html :
quelle
Wie in @mah angegeben, heißt es in der Android-Dokumentation ( https://developer.android.com/guide/topics/resources/providing-resources.html ), dass JSON-Dateien möglicherweise im Verzeichnis / raw unter / res (resources) gespeichert werden. Verzeichnis in Ihrem Projekt, zum Beispiel:
Innerhalb von
Activity
kann auf die json-Datei über dieR
Klasse (Resources) zugegriffen und in einen String eingelesen werden:Dies verwendet die Java-Klasse
Scanner
, was zu weniger Codezeilen führt als einige andere Methoden zum Lesen einer einfachen Text- / JSON-Datei. Das Begrenzungsmuster\A
bedeutet "der Beginn der Eingabe"..next()
liest das nächste Token, in diesem Fall die gesamte Datei.Es gibt mehrere Möglichkeiten, die resultierende JSON-Zeichenfolge zu analysieren:
optString(String name)
,optInt(String name)
usw. Methoden, nicht diegetString(String name)
,getInt(String name)
Methoden, weil dieopt
Methoden null anstelle einer Ausnahme bei Versagen zurück.quelle
import java.util.Scanner; import java.io.InputStream; import android.content.Context;
quelle
Verwenden von:
Funktionen:
quelle
Fand diese Kotlin Snippet Antwort sehr hilfreich ♥ ️
Während die ursprüngliche Frage gestellt wurde, um einen JSON-String zu erhalten, denke ich, dass einige dies nützlich finden könnten. Ein weiterer Schritt mit
Gson
führt zu dieser kleinen Funktion mit reifiziertem Typ:Beachten Sie, dass Sie
TypeToken
nicht nur verwenden möchten, um beimT::class
Lesen von aList<YourType>
die Löschung von Typ zu Typ nicht zu verlieren.Mit der Typinferenz können Sie dann wie folgt verwenden:
quelle