Как парсить JSON с помощью GSON?

Есть JSON-чик, который надо запарсить - https://api.openweathermap.org/data/2.5/weather?q=Тюмень&appid=83623663100b56b2e64fa7b514835b7f&units=metric:

{"coord":{"lon":65.5272,"lat":57.1522},

"weather":
    [{"id":620,"main":"Snow","description":"light shower snow","icon":"13d"}],

"base":"stations","main":
    {"temp":-3.28,"feels_like":-10.2,"temp_min":-3.28,"temp_max":-2.95,"pressure":1006,"humidity":86},

"visibility":9000,

"wind":{"speed":7.15,"deg":80,"gust":12.07},

"clouds":
    {"all":100},

"dt":1698652392,

"sys":
    {"type":2,"id":2086898,"country":"RU","sunrise":1698633772,"sunset":1698667206},

"timezone":18000,

"id":1488754,

"name":"Tyumen",

"cod":200}

Надо достать из "main": "temp", "temp_min", "temp_max"

Код MainActivity:

package com.example.learnkotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val temperature: TextView = findViewById(R.id.temperature)
        val minTemperature: TextView = findViewById(R.id.min_temperature)
        val maxTemperature: TextView = findViewById(R.id.max_temperature)

        val response: Response = com.google.gson.Gson().fromJson(
            "https://api.openweathermap.org/data/2.5/weather?q=Тюмень&appid=83623663100b56b2e64fa7b514835b7f&units=metric",
            object : com.google.gson.reflect.TypeToken<Response>() {}.type
        )
        temperature.text = response.main.temp
        minTemperature.text = response.main.temp_min
        maxTemperature.text = response.main.temp_max
    }
}

class Response(
    val main: Main,
)

class Main(
    val temp: String,
    val temp_min: String,
    val temp_max: String,
)

Приложение вылетает при запуске, библиотеку Gson в Gradle прописал.\

Код build.gradle.kts:

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.learnkotlin"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.learnkotlin"
        minSdk = 24
        targetSdk = 0
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.9.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.10.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

    implementation ("io.reactivex.rxjava2:rxjava:2.1.7")
    implementation ("io.reactivex.rxjava2:rxandroid:2.0.1")
    implementation ("io.reactivex.rxjava2:rxkotlin:2.2.0")
    implementation ("com.google.code.gson:gson:2.10.1")
}

Логи:

2023-10-30 16:17:30.139 14498-14498 AndroidRuntime com.example.learnkotlin E FATAL EXCEPTION: main
Process: com.example.learnkotlin, PID: 14498
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.learnkotlin/com.example.learnkotlin.MainActivity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:138)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7959)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:397)
    at com.google.gson.Gson.fromJson(Gson.java:1227)
    at com.google.gson.Gson.fromJson(Gson.java:1137)
    at com.google.gson.Gson.fromJson(Gson.java:1047)
    at com.google.gson.Gson.fromJson(Gson.java:1014)
    at com.example.learnkotlin.MainActivity.onCreate(MainActivity.kt:16)
    at android.app.Activity.performCreate(Activity.java:8348)
    at android.app.Activity.performCreate(Activity.java:8327)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1423)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:138) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:201) 
    at android.os.Looper.loop(Looper.java:288) 
    at android.app.ActivityThread.main(ActivityThread.java:7959) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:393)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:386)
    at com.google.gson.Gson.fromJson(Gson.java:1227) 
    at com.google.gson.Gson.fromJson(Gson.java:1137) 
    at com.google.gson.Gson.fromJson(Gson.java:1047) 
    at com.google.gson.Gson.fromJson(Gson.java:1014) 
    at com.example.learnkotlin.MainActivity.onCreate(MainActivity.kt:16) 
    at android.app.Activity.performCreate(Activity.java:8348) 
    at android.app.Activity.performCreate(Activity.java:8327) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1423) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:138) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:201) 
    at android.os.Looper.loop(Looper.java:288) 
    at android.app.ActivityThread.main(ActivityThread.java:7959) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942) 

Ответы (0 шт):