Analysieren Sie JSON-String zu Objekt in Kotlin
- Erstellen Sie ein neues Projekt und fügen Sie Abhängigkeiten hinzu
-
Analysieren Sie den JSON-String in ein Objekt in Kotlin mit der Bibliothek
kotlinx.serialization
-
Analysieren Sie JSON-String zu Objekt in Kotlin mit der Bibliothek
org.json
- Analysieren Sie die JSON-Zeichenfolge in ein Objekt in Kotlin mithilfe der Gson-Bibliothek
- Analysieren Sie die JSON-Zeichenfolge in ein Objekt in Kotlin mithilfe der Jackson-Bibliothek
- Fazit
JSON steht für JavaScript Object Notation, ein Datenaustauschformat, das von Client-Server-Architekturen verwendet wird, um Daten zwischen Computern zu übertragen oder Daten in einer Datenbank zu speichern.
Die JSON-Daten werden mithilfe von REST-APIs verbraucht, die HTTP-Anforderungen an die Server ausgeben, um CRUD-Vorgänge für die in der Datenbank gespeicherten Daten auszuführen. Wenn wir beispielsweise Daten dynamisch auf eine Webseite oder eine mobile Anwendung laden, rufen wir diese Daten normalerweise als JSON aus der Datenbank ab, parsen die Daten in Objekte und zeigen jede Objektvariable in der Ansicht an.
In diesem Tutorial lernen wir die verschiedenen Methoden kennen, mit denen wir JSON-Daten in Kotlin-Objekte parsen können.
Erstellen Sie ein neues Projekt und fügen Sie Abhängigkeiten hinzu
Um ein neues Projekt zu erstellen, gehen Sie zu Intellij und wählen Sie Datei > Neu > Projekt
. Geben Sie im sich öffnenden Fenster als Projektnamen kotlinSerialization
ein, wählen Sie im Abschnitt Sprache Kotlin
und im Abschnitt Build System Gradle
aus.
Drücken Sie die Schaltfläche Create
, um ein neues Projekt zu erstellen. Sobald das Projekt generiert ist, gehen Sie zur Datei build.gradle.kts
und stellen Sie sicher, dass Sie die folgenden Abhängigkeiten haben.
dependencies {
implementation ("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3")
implementation ("com.google.code.gson:gson:2.9.0")
implementation("org.json:json:20220320")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3")
testImplementation(kotlin("test"))
}
Jede Abhängigkeit stellt APIs bereit, die wir verwenden, um jede Implementierung zu erstellen. Stellen Sie also sicher, dass Sie über alle Abhängigkeiten verfügen, um nicht aufgelöste Referenzfehler zu vermeiden.
Analysieren Sie den JSON-String in ein Objekt in Kotlin mit der Bibliothek kotlinx.serialization
In diesem Beispiel müssen wir sicherstellen, dass wir die folgenden Plugins im Abschnitt Plugins der Datei build.gradle.kts
haben.
plugins {
kotlin("jvm") version "1.7.0"
kotlin("plugin.serialization") version "1.7.0"
}
Erstellen Sie die Ordnerstruktur com/serialize
unter dem Ordner kotlin
des Projekts, in dem unsere Kotlin-Dateien erstellt werden.
Erstellen Sie eine Datei mit dem Namen UsingKotlinx.kt
im Ordner serialize
und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
package com.serialize
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
val employeeJSON = """
{
"firstName": "john",
"lastName": "doe",
"email": "john@gmail.com"
}
""".trimIndent()
@Serializable
data class Employee(val firstName: String,
val lastName: String,
val email: String)
fun main(args: Array<String>){
//Decode employee from string
val employeeObject = Json.decodeFromString<Employee>(employeeJSON);
println(employeeObject);
}
Im obigen Code haben wir einen mehrzeiligen Text unseres JSON-Objekts erstellt, indem wir Kotlins Text in dreifachen Anführungszeichen verwendet haben, um unser Mitarbeiterobjekt darzustellen. Die Methode trimIndent()
entfernt einen gemeinsamen
Einzug aller Eingabezeilen und entfernt die erste und letzte Zeile, falls sie leer sind.
Anschließend haben wir eine Klasse Employee
erstellt und diese mit der Annotation @Serializable
versehen. Die Klasse Employee
ist eine Datenklasse mit den Parametern firstName
, lastName
und email
.
Diese Parameter speichern unsere Daten, daher das Schlüsselwort data
. Wenn wir eine Datenklasse verwenden, erhalten wir einige Methoden wie toString()
aus der Box, ohne sie zu deklarieren, und dies ist entscheidend, wenn Sie die Daten in der Konsole protokollieren möchten.
Die Annotation @Serializable
macht die Klasse Employee
serialisierbar, was bedeutet, dass wir sie in ein Format ändern können, das in einer Datenbank oder einer Datei gespeichert oder über das Netzwerk übertragen werden kann.
Um unser JSON-Objekt in ein Kotlin-Objekt zu parsen, rufen wir die generische Methode decodeFromString()
von Json
auf. Da wir ein Mitarbeiterobjekt zurückgeben wollen, übergeben wir die Klasse Employee
an den Typparameter und unseren JSON-String als Argument der Methode.
Die Anweisung print
protokolliert das geparste Objekt auf der Konsole. Führen Sie den Code aus und beachten Sie, dass das Objekt als Zeichenfolge in der Konsole protokolliert wird, wie unten gezeigt.
Employee(firstName=john, lastName=doe, email=john@gmail.com)
Analysieren Sie JSON-String zu Objekt in Kotlin mit der Bibliothek org.json
In diesem Beispiel verwenden wir die JSONObject
-API, die von der org.json
-Bibliothek bereitgestellt wird. Beachten Sie, dass diese Bibliothek beim Hinzufügen der Abhängigkeiten in unsere Anwendung aufgenommen wurde.
Erstellen Sie eine Datei mit dem Namen UsingJSONObject.kt
im Ordner serialize
und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
package com.serialize
import org.json.JSONObject
val usersArray = """
{
"User":[
{
"firstName": "john",
"lastName": "doe",
"email": "john@gmail.com"
},
{
"firstName": "mary",
"lastName": "public",
"email": "mary@gmail.com"
}
]
}
""".trimIndent()
class User{
var firstName: String? = null;
var lastName: String? = null;
var email: String? = null
override fun toString(): String {
return "User(firstName=$firstName, lastName=$lastName, email=$email)"
}
}
fun main() {
val userJsonObject =
JSONObject(usersArray)
val userObject = userJsonObject
.getJSONArray("User");
for (i in 0 until(userObject!!.length())){
val theUser = User();
val firstName = userObject
.getJSONObject(i)
.getString("firstName");
theUser.firstName = firstName
val lastName = userObject
.getJSONObject(i)
.getString("lastName")
theUser.lastName = lastName
val email = userObject
.getJSONObject(i)
.getString("email")
theUser.email = email;
println(theUser);
}
}
Der erste und der zweite Schritt ähneln denen, die wir im vorherigen Beispiel behandelt haben, aber diese Klasse erstellt ein Array von JSON-Objekten und verwendet eine normale Kotlin-Klasse. Da wir in diesem Beispiel keine Datenklasse verwenden, müssen wir unsere benutzerdefinierte toString()
-Methode mit den Feldern firstName
, lastName
und email
erstellen.
Um das JSON-Array abzurufen, rufen wir den Konstruktor JSONObject()
auf und übergeben den JSON-String als Argument des Konstruktors. Der Konstruktor erstellt ein JSON-Objekt aus einer Zeichenfolge, die mit {
beginnt und mit }
endet; Es löst eine JSONException
aus, wenn der String einen Fehler enthält.
Der Zugriff auf das JSON-Objekt ermöglicht es uns, jede gewünschte Eigenschaft abzurufen, indem wir diese Eigenschaft als Argument übergeben. Um das Array von Benutzern abzurufen, rufen wir die Methode getJSONArray()
aus dem zurückgegebenen Objekt auf und übergeben User
als Argument der Methode.
Die Methode gibt ein JSONArray
von Benutzern aus dem Objekt zurück.
Das Erstellen von Kotlin-Objekten aus dem JSONArray
erfolgt manuell über eine Schleife. Wir rufen jedes Objekt aus dem Array mit der Methode getJSONObject()
ab, indem wir den Index des Objekts als Argument der Methode übergeben.
Von diesem Objekt rufen wir jede Variable ab und weisen sie einem neuen Kotlin-Objekt zu, das für jede Iteration erstellt wird. Führen Sie die Anwendung aus, um zu überprüfen, ob sie die folgenden Zeichenfolgenobjekte ausgibt.
User(firstName=john, lastName=doe, email=john@gmail.com)
User(firstName=mary, lastName=public, email=mary@gmail.com)
Analysieren Sie die JSON-Zeichenfolge in ein Objekt in Kotlin mithilfe der Gson-Bibliothek
Erstellen Sie eine UsingGson.kt
-Datei im Ordner serialize
und kopieren Sie den folgenden Code in die Datei.
package com.serialize
import com.google.gson.Gson
val customerObject = """
{
"firstName": "john",
"lastName": "doe",
"email": "john@gmail.com"
}
""".trimIndent()
class Customer{
private val firstName: String? = null;
private val lastName: String? = null;
private val email: String? = null;
override fun toString(): String {
return "Customer(firstName=$firstName, lastName=$lastName, email=$email)"
}
}
fun main() {
val theGson = Gson();
val customer = theGson
.fromJson(customerObject, Customer::class.java);
println(customer);
}
Wir sind sicher, dass Sie verstanden haben, dass im ersten Schritt eine JSON-Darstellung unseres Objekts erstellt wird und im zweiten Schritt eine Klasse erstellt wird, die zum Erstellen eines Kotlin-Objekts aus der Zeichenfolge verwendet wird.
Die Hauptmethode ruft den Konstruktor Gson()
auf, um ein Gson-Objekt mit der Standardkonfiguration zu erstellen.
Um unseren JSON-String einem Kotlin-Objekt zuzuordnen, rufen Sie die Methode fromJson()
aus dem Gson-Objekt auf und übergeben Sie den JSON-String als erstes Argument der Methode und class
als zweiten Parameter der Methode.
Beachten Sie, dass die Methode fromJson()
generisch ist und den Objekttyp zurückgibt, der als zweites Argument der Methode übergeben wird. Die Methode wird auch überladen, um andere Implementierungen bereitzustellen, z. B. das Lesen des JSON-Objekts aus einer Datei.
Führen Sie das Programm aus und beachten Sie, dass es das folgende Zeichenfolgenobjekt in der Konsole protokolliert.
Customer(firstName=john, lastName=doe, email=john@gmail.com)
Analysieren Sie die JSON-Zeichenfolge in ein Objekt in Kotlin mithilfe der Jackson-Bibliothek
Erstellen Sie eine Datei mit dem Namen UsingJackson.kt
im Ordner serialize
und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
package com.serialize
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
val vehicleObject = """
{
"vehicleName": "Toyota",
"vehicleColor": "white",
"vehiclePrice": 10000
}
""".trimIndent()
data class Vehicle(private val vehicleName: String,
private val vehicleColor: String,
private val vehiclePrice: Int)
fun main() {
val jacksonMapper = jacksonObjectMapper();
val vehicle = jacksonMapper
.readValue(vehicleObject, Vehicle::class.java)
println(vehicle);
}
In diesem Code haben wir eine Zeichenfolge erstellt, die unser JSON-Objekt darstellt, und eine Klasse, die verwendet wird, um die Zeichenfolge einem Kotlin-Objekt zuzuordnen. Die in der Klasse erstellten Eigenschaften müssen mit den Schlüsseln in der JSON-Zeichenfolge identisch sein.
Um die Jackson-Bibliothek zu verwenden, rufen wir den jacksonObjectMapper()
in der Hauptmethode auf, um einen ObjectMapper
zu erstellen. Dann rufen wir die readValue()
-Methode des ObjectMapper
auf und übergeben den JSON-String als erstes Argument und die class
, die gemappt wird, als zweites Argument.
Die Methode readValue()
deserialisiert den JSON-String und gibt den Objekttyp zurück, der als zweites Argument der Methode übergeben wird.
Führen Sie den Code aus, um zu überprüfen, ob das folgende Objekt als Zeichenfolge in der Konsole protokolliert wird.
Vehicle(vehicleName=Toyota, vehicleColor=white, vehiclePrice=10000)
Fazit
In diesem Tutorial haben wir gelernt, wie man ein JSON-Objekt in ein Kotlin-Objekt parst. Zu den Ansätzen, die wir behandelt haben, gehören: Verwenden der Bibliothek kotlix.serialization
, der Bibliothek org.json
, der Bibliothek Gson
und der Bibliothek Jackson
.
Beachten Sie, dass dies nicht die einzigen Bibliotheken sind, die wir verwenden können, um dasselbe Ziel zu erreichen. Sie können Ihre Anwendung also gerne mit anderen Bibliotheken implementieren.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub