Как создать объект JSON в Kotlin? - PullRequest
1 голос
/ 25 сентября 2019

Я действительно новичок в программировании, и недавно начал проект в Котлине с Android Studio.

Итак, у меня проблема с объектом JSON.Я получаю данные из объекта BroadcastReceiver, точнее String, в следующем формате:

{"s1":1}

Это простая строка.Итак, я принял вызов функции к Json, и я делаю это.

private fun toJson(data:String): JSONObject {

    var newData: String = data.replace("\"","")
    newData = newData.replace("{","")
    newData = newData.replace("}","")

    val newObject = newData.split(":")
    val name = newObject[0]
    val value = newObject[1]
    val rootObject = JSONObject()
    rootObject.put(name,value)

    return rootObject
}

Я делаю это правильно? Как я могу улучшить свой код?

Спасибо за вашу помощь, и извинитеза мой английский!

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Добро пожаловать в StackOverflow!

В 2019 году никто не анализирует JSON вручную.Гораздо проще использовать библиотеку Gson .Он принимает в качестве входных данных ваш объект и выплевывает строку JSON и наоборот.

Пример:

data class MyClass(@SerializedName("s1") val s1: Int)

val myClass: MyClass = Gson().fromJson(data, MyClass::class.java)
val outputJson: String = Gson().toJson(myClass)

Таким образом, вы работаете не со строкой JSON напрямую, а с объектом Kotlinкоторый является типобезопасным и более удобным.Посмотри на документы.Это довольно большой и простой для понимания

Вот несколько уроков:

ОБНОВЛЕНИЕ : Если вы действительно хотите использовать JSONObject, используйте его конструктор со строковым параметром, который автоматически анализирует вашу строку JSON.

val jsonObject = JSONObject(data)
1 голос
/ 25 сентября 2019

Я добавляю здесь 3 шаблона для разработчиков Kotlin. Это решит проблемы преобразования json и анализа.

//Json Array template
{
  "json_id": "12.4",
  "json_name": "name of the array",
  "json_image": "https://image_path",
  "json_description": "Description of the Json Array"
}

Класс модели Kotlin

data class JsonDataParser(
  @SerializedName("json_id") val id: Long, 
  @SerializedName("json_name") val name: String, 
  @SerializedName("json_image") val image: String,
  @SerializedName("json_description") val description: String
)

Преобразование в строку Json из моделиКласс

val gson = Gson()
val json = gson.toJson(jsonDataParser)

Парсинг из файла Json / Сильный

val json = getJson()
val topic = gson.fromJson(json, JsonDataParser::class.java)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...