【Android】JSONObiectとGson関連メソッドを利用してjsonデータとkotlinオブジェクトの相互変換を実現する

目次

1. JSONとは何ですか?

2.JSONデータ形式

3. 関連する API

1.JSONオブジェクト:

   2.グソン

  4. JSONオブジェクトを使用する

json 形式の文字列 {} を kotlin オブジェクトに変換します

json 形式の String[] を kotlin オブジェクトのリストに変換します

5.GSONを使用する

最初に依存関係を追加するには

json 形式の文字列 {} を kotlin オブジェクトに変換します 

 json 形式の String[] を kotlin オブジェクトのリストに変換します

kotlin オブジェクトを json 文字列に変換する{}

kotlin オブジェクトのリストを json string[] に変換します

6. Map を使用して、JSON オブジェクト キーの特殊なケースをカプセル化します。


1. JSONとは何ですか?

  • JSON (JavaScript Object Notation) は軽量のデータ交換形式です
  • 本質は特定の形式の文字列です
  • JSON データはすでにクライアントとサーバーの対話に最も一般的な選択肢であり、データ対話に XML が使用されることはほとんどありません。

XML に対する JSON の長所と短所:

利点: JSON はサイズが小さく、ネットワーク上で送信される際のトラフィックを節約します。

短所: セマンティクスが貧弱で、XML よりも直観的ではありません。 

JSON形式でデータを取得する方法

JSON を学び始めたばかりの友人にとって、JSON 形式でデータを取得する方法という問題は常にあります。同じ問題を抱えている場合は、私の他のブログ http://t.csdn.cn/JNaXQ を試してみてください詳しい紹介が載っています。

2.JSONデータ形式

  • フレーム全体

           Json配列: []

           Json オブジェクト: {}

  • Json 配列の構造: [value1,value2,value3]
  • Json オブジェクトの構造: {key1: value1, key2: value2, key3: value3}
  • キーのデータ型: 文字列
  • 値のデータ型

            値文字列 null json 配列 json オブジェクト

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

3. 関連する API

1.JSONオブジェクト:

  • JsonObject: json オブジェクト {}

           JSONObject( json:String): json 文字列を json オブジェクトに解析します。

           Xxx.getXxx(name:String): 名前に従って、json オブジェクト内の対応する値を取得します。

  • JsonArray: json 配列 []

       JSONArray(json:String ): json 文字列を解析して json 配列に変換します

        length(): json配列の要素数を取得します。

        Xxx.getJSONObject(index:int ): 添字に従ってjson配列内の対応する要素データを取得します

   2.グソン

  • Gson: JSONデータを解析できるクラス

       Gson(): オブジェクトを構築するメソッド

       toJson(src:Object): オブジェクトを対応する形式の json 文字列に変換します。

       fromJson(json:String,typeOfT:Type):T: JSon 文字列を解析してオブジェクトを取得します

  • TypeToken<T>: Type を取得するために使用されるクラス

       protected TypeToken(): 保護された構築メソッド

       getType():Type: 型オブジェクトを取得します。

  4. JSONオブジェクトを使用する

json形式の文字列 {} をkotlin オブジェクトに変換します

1. json 文字列を JSONObject オブジェクトにカプセル化します。

2. キーに従ってオブジェクトから対応する値を取得します

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()
        }
}

json形式の String[] をkotlin オブジェクトのリストに変換します

1. json文字列をJSONArrayオブジェクトにラップします。

2. JSONArray オブジェクト (JSONObject) のすべての要素を走査し、各要素を shopInfo としてカプセル化し、リストに追加します。

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.GSONを使用する

最初に依存関係を追加するには

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

json形式の文字列 {} をkotlin オブジェクト に変換します

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

json形式の String[] を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")
        }
    }

kotlin オブジェクトを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)
    }

kotlin オブジェクトのリストを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. Map を使用して、JSON オブジェクト キーの特殊なケースをカプセル化します。

json オブジェクトのキーが変数の命名規則に準拠していない場合 (例: my name (変数にスペースを含む) や 2)、このメンバー変数を ShopInfo クラスに追加できません。これを解決するにはどうすればよいですか?

json オブジェクトを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())
 }

おすすめ

転載: blog.csdn.net/weixin_63357306/article/details/128441246