#arrays #json #list #kotlin #gson
Вопрос:
Я довольно новичок в Kotlin и Json, и в своей работе я использую GSON для анализа Json. Мне нужно проанализировать следующий файл Json в класс с помощью GSON.
{
"apiKey": "blablabla",
"baseUrl": "blablabla",
"requestData": [
{
"lng": "6.971",
"lat": "50.942",
"rad": "1.5",
"type": [
"diesel",
"super"
]
},
{
"lng": "6.442",
"lat": "51.180",
"rad": "1.5",
"type": [
"diesel",
"super"
]
},{
"lng": "7.136",
"lat": "50.991",
"rad": "1.5",
"type": [
"diesel",
"super"
]
}
]
}
Теперь я попытался создать класс данных, подобный этому:
data class ApiParameterData(
var apiKey: String? = null,
var baseUrl: String? = null,
var requestData: String? = null) {
}
Я также создал еще один класс для хранения информации Json в нем, как это:
class Tankstelle: JsonDeserializer<ApiParameterData> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?
): ApiParameterData {
json as JsonObject
val apiKey = json.get("apiKey").asString
val baseUrl = json.get("baseUrl").asString
val requestDataJson = json.get("requestData")
val requestData = if (requestDataJson.isJsonObject) requestDataJson.asJsonObject.toString() else requestDataJson.toString()
return ApiParameterData(apiKey, baseUrl, requestData)
}
}
Я пытался назвать это так:
val gsonConfig = GsonBuilder().registerTypeAdapter(ApiParameterData::class.java, Tankstelle()).create()
val tanke = gsonConfig.fromJson(readJson, ApiParameterData::class.java)
println(tanke.requestData?.get(0))
Но, конечно, результат, который я получаю, — это «[» . Я думаю, потому что я получаю обратно строку или что-то в этом роде, и это первый символ этого?
Мне нужно выполнить цикл через список requestData и сохранить его в качестве экземпляра класса, и мне нужно получить доступ к каждому другому значению. Дело в том, что я хочу предоставить файлу Json разные места и диапазоны, в которых он должен искать газовые станции. Прочитав Json, он должен собрать все фрагменты и создать ссылку для каждого места, которое я пишу в списке requestData. Так что в этом случае мне понадобятся 3 разных ссылки в конце. Но это еще одна часть, которую я могу сделать сам. Я просто не знаю, как проанализировать его, чтобы получить доступ и сохранить все значения в этом Json.
Спасибо вам уже и приятного вам уик-энда!
Если вам нужна дополнительная информация, просто дайте мне знать
Ответ №1:
Сначала вам нужно определить два типа, которые соответствуют вашей JSON
структуре
class ApiParameterData(
val apiKey: String,
val baseUrl: String,
val requestData: List<RequestObject>
)
class RequestObject(
val lng: String,
val lat: String,
val rad: String,
val type: List<String>
)
Теперь просто проанализируйте его как
val apiData = Gson().fromJson(readJson, ApiParameterData::class.java) // No need to add TypeAdapter
// To get requestData
val requestData = apiData.requestData
requestData.forEach {
print("${it.lng}, ${it.lat}, ${it.rad}, ${it.type})
}