目次
json 形式の文字列 {} を kotlin オブジェクトに変換します
json 形式の String[] を kotlin オブジェクトのリストに変換します
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())
}