KotlinでJson扱うとき楽にするAndroid4.0.3以上向けライブラリ。JsonLibraryを入れるのがめんどくさくてAndroidの組み込み使ってるからAndroid向けになってるとは言えない…

使用方法

gradle


dependencies {
   compile 'net.meilcli:hkjson:1.2.0'
}

サンプル


import net.meilcli.hkjson.HKJson
import net.meilcli.hkjson.IHKJson
import org.json.JSONObject
class Data(json:JSONObject? =null) : IHKJson by HKJson(json){
   val testStringVal:String by string.json("test_string_val")
   var testStringVar by string.json("test_string_var") // 型の省略
   val testOptionalStringVal: String? by string.optional.json("test_optional_string_val")
   var testOptionalStringVar by string.optional.json("test_optional_string_var")
}

定義方法

使用したいクラスでIHKJsonインターフェースを実装する 以下のようにHKJsonに処理を移譲させるとよい

IHKJson by HKJson()

注意 : HKJsonに処理を移譲した場合プライマリコンストラクターにしか使えません

また、JSONObjectでオブジェクトの初期化をする場合はコンストラクターに以下のように渡す

// クラス名Dataの場合
// デフォルト値nullを与えることによって引数なしにも対応できる
class Data(json:JSONObject? =null) : IHKJson by HKJson(json)

HKJsonコンストラクタでJSONObjectの初期化をした場合HKJson内部でJSONObjectがキャッシュされます、キャッシュされたJSONObjectをGC対象にするにはclearJsonCache()を行ってください

以下のように記述することで即時にGC対象にすることが可能です

class Data(json: JSONObject? = null) : IHKJson by HKJson(json) {
   init {
      clearJsonCache()
   }
}

プロパティはval,var両方に対応、キーワードを変えるだけです

val testStringVal by string.json("test_string_val")
var testStringVar by string.json("test_string_var")

Optional型・Arrayにも対応、型名を指定する感覚でメソッドを呼び出すだけです

val testString: String by string.json("test_string")
val testOptionalString: String? by string.optional.json("test_optional_string")
val testStringArray: Array by string.array.json("test_string_array")
val testOptionalStringArray: Array? by string.array.optional.json("test_optional_string_array")

対応クラス

ルート .json .optional.json .array.json .array.optional.json
string String String? Array<String> Array<String>?
boolean Boolean Boolean? BooleanArray BooleanArray?
int Int Int? IntArray IntArray?
long Long Long? LongArray LongArray?
double Double Double? DoubleArray DoubleArray?
date Date Date? Array<Date> Array<Date>?
hkjson T : IJson T? : IJson Array<T : IJson> Array<T : IJson>?

対応クラス以外は下記のメソッドを使用する

hkjson.custom.json
hkjson.custom.optional.json

またCompanion ObjectでIJsonObjectインターフェース、IJsonArrayインターフェースを継承する方法もある 継承した場合以下のように対応クラスと同様なメソッドになります

<T : IHKJson> IJsonObject<T>.json
<T : IHKJson> IJsonObject<T>.optional.json
<T : IHKJson> IJsonArray<T>.array.json
<T : IHKJson> IJsonArray<T>.array.optional.json

JSONObjectで初期化する場合

IHKJson.parseJson

JSONObjectを取得する場合

IHKJson.makeJson

IHJKsonに委譲しているすべてのプロパティが使用可能(非nullable型に値がある)かを確認する場合

IHKJson.isValid

非nullable型にデフォルト値を持たせる場合

.jsonと.array.jsonにはデフォルト値を持たせるオーバーロードがあります、デフォルト値を引数に追加してください

型名を指定するのを短くする場合

StringJson.json
StringOptionnalJson.json
StringArrayJson.json
StringArrayOptionalJson.json

のようにクラスを指定します クラス命名規則は[対象クラス](Array)(Optional)Jsonとなっています

ライセンス

このライブラリはThe MIT Licenseで公開しています Apache License, Version 2.0The Kotlin Standard Libraryを使用しています