[Android] Use métodos relacionados con JSONObiect y Gson para realizar una conversión mutua entre datos json y objetos kotlin

Tabla de contenido

1. ¿Qué es JSON?

2. Formato de datos JSON

3. API relacionadas

1.JSONObjeto:

   2. hijo

  4. Usar JSONObject

Convierta la cadena con formato json {} en un objeto kotlin

Convierta String[] en formato json a Lista de objetos kotlin

5. Usa GSON

Para agregar dependencias primero

Convierta la cadena con formato json {} en un objeto kotlin 

 Convierta String[] en formato json a Lista de objetos kotlin

convertir objeto kotlin a cadena json{}

Convertir lista de objetos kotlin a json string[]

6. Use Map para encapsular el caso especial de la clave de objeto json


1. ¿Qué es JSON?

  • JSON (Notación de objetos JavaScript) es un formato ligero de intercambio de datos
  • La esencia es una cadena con un formato específico.
  • Los datos JSON ya son la opción más común para la interacción cliente-servidor, y xml rara vez se usa para la interacción de datos.

Ventajas y desventajas de JSON sobre XML:

Ventajas: JSON tiene un tamaño más pequeño y ahorra tráfico cuando se transmite en la red.

Desventajas: mala semántica, parece menos intuitivo que XML. 

Cómo obtener datos en formato JSON

Para los amigos que recién comienzan a aprender JSON, siempre habrá un problema: cómo obtener datos en formato JSON, si tiene el mismo problema ahora, puede probar mi otro blog http://t.csdn.cn/JNaXQ Hay introducciones detalladas.

2. Formato de datos JSON

  • todo el cuadro

           Matriz Json: []

           Objeto json: {}

  • La estructura de la matriz Json: [valor1, valor2, valor3]
  • La estructura del objeto Json: {key1: value1, key2: value2, key3: value3}
  • tipo de datos de clave: cadena
  • El tipo de datos de valor

            valor cadena nulo json matriz json objeto

  • ejemplo

        [1,"abcd",[{"a",1}],{"b":2,"c":[]}]

3. API relacionadas

1.JSONObjeto:

  • JsonObject: objeto json {}

           JSONObject( json:String): analiza la cadena json en un objeto json

           Xxx.getXxx(name:String): Obtenga el valor correspondiente en el objeto json según el nombre

  • JsonArray: matriz json []

       JSONArray (json: String): analiza una cadena json en una matriz json

        length (): obtenga la cantidad de elementos en la matriz json

        Xxx.getJSONObject (índice: int): obtenga los datos del elemento correspondiente en la matriz json de acuerdo con el subíndice

   2. hijo

  • Gson: una clase que puede analizar datos json

       Gson(): Método para construir objetos

       toJson(src:Object): convierte el objeto en una cadena json en el formato correspondiente

       fromJson(json:String,typeOfT:Type):T: analiza la cadena JSon para obtener el objeto

  • TypeToken<T>: la clase utilizada para obtener el tipo

       TypeToken protegido (): método de construcción protegido

       getType():Tipo: obtener el tipo de objeto

  4. Usar JSONObject

Convierta la cadena con formato json {} en un objeto kotlin

1. Encapsule la cadena json en un objeto JSONObject

2. Obtener el valor correspondiente del objeto según la clave

private fun JsonToObject(jsonData:String){
        try {
            //1.将json字符串封装成JSONObject对象
            val jsonObject:JSONObject= JSONObject(jsonData)
            //2.从对象中根据key得到对应的value
            val id:Int=jsonObject.getInt("id")
            val name:String=jsonObject.getString("name")
            val price:Double=jsonObject.getDouble("price")
            val imagePath:String=jsonObject.getString("imagePath")
            Log.d("data","id is $id")
            Log.d("data","name is $name")
            Log.d("data","price is $price")
            Log.d("data","imagePath is $imagePath")
        }catch (e:Exception){
            e.printStackTrace()
        }
}

Convierta String[] en formato json a Lista de objetos kotlin

1. Envuelva la cadena json en el objeto JSONArray

2. Recorra todos los elementos del objeto JSONArray (JSONObject), encapsule cada elemento como shopInfo y agréguelo a la Lista

private fun JsonToList(jsonData:String){
        try {
            val list= ArrayList<ShopInfo>()
            //1.将json字符串包装JSONArray对象
            val jsonArray= JSONArray(jsonData)
            //2.遍历JSONArray对象所以元素(JSONObject),并将每个元素封装为shopInfo,
             //并添加到List
            for(i in 0 until jsonArray.length()){
                val jsonObject=jsonArray.getJSONObject(i)
                //从对象中根据key得到对应value
                val id:Int=jsonObject.getInt("id")
                val name:String=jsonObject.getString("name")
                val price:Double=jsonObject.getDouble("price")
                val imagePath:String=jsonObject.getString("imagePath")
                Log.d("data","id is $id")
                Log.d("data","name is $name")
                Log.d("data","price is $price")
                Log.d("data","imagePath is $imagePath")
                list.add(ShopInfo(id,name,price,imagePath))
            }
        }catch (e:Exception) {
            e.printStackTrace()
        }
}

5. Usa GSON

Para agregar dependencias primero

implementation 'com.google.code.gson:gson:2.8.5'

Convierta la cadena con formato json {} en un objeto kotlin 

 private fun JsonToObjectGson(jsonData:String){
        val gson=Gson()
        val shopInfo=gson.fromJson(jsonData,ShopInfo::class.java)
 }

 Convierta String[] en formato json a Lista de objetos kotlin

 private fun JsonToListGson(jsonData:String){
        val gson=Gson()
        val typeOf=object:TypeToken<List<ShopInfo>>(){}.type
        val list=gson.fromJson<List<ShopInfo>>(jsonData,typeOf)
        for (a in list){
            Log.d("data","id is $a.id")
            Log.d("data","name is $a.name")
            Log.d("data","price is $a.price")
            Log.d("data","imagePath is $a.imagePath")
        }
    }

convertir objeto kotlin a cadena json{}

 private fun ObjectToJson(){
        val info:ShopInfo= ShopInfo(4,"小名",11.0,"http://www.ddd.com")
        val json:String=Gson().toJson(info)
        Log.d("data",json)
    }

Convertir lista de objetos kotlin a json string[]

private fun ListToJson(){
        val list=ArrayList<ShopInfo>()
        list.add(ShopInfo(4,"小名",11.0,"http://www.ddd.com"))
        list.add(ShopInfo(5,"小星",21.0,"http://www.eee.com"))
        val json:String=Gson().toJson(list)
        Log.d("data",json)
 }

6. Use Map para encapsular el caso especial de la clave de objeto json

Cuando la clave del objeto json no se ajusta a las reglas de nomenclatura de variables, como: mi nombre (con espacios en la variable) o 2, esta variable miembro no se puede agregar a la clase ShopInfo, ¿cómo solucionarlo?

Podemos convertir el objeto json a Map .

 private fun JsonToMap(jsonString:String) {
        val json=Gson()
        val typeOf=object :TypeToken<Map<String,Objects>>(){}.type
       val map:Map<String,Objects> = json.fromJson(jsonString,typeOf)
        Log.d("data",map.toString())
 }

Supongo que te gusta

Origin blog.csdn.net/weixin_63357306/article/details/128441246
Recomendado
Clasificación