ちょっとハマったのでメモ
(kotlin でやっていたのでコードサンプルも kotlin で書きますが、 Java でも同じはず。です。gson のバージョンは 2.8.4)
とある API から取ってきた json を Gson でハンドリングしようとして、モックのつもりで下記のように書いた。
fun
の中で JsonFormat
を定義して Gson().fromJson
に渡す
class Sample {
fun parseJson(jsonString: String) {
data class SampleJsonFormat(
val sample_key: String
)
val obj = Gson().fromJson(jsonString, SampleJsonFormat::class.java)
if (obj == null) {
System.out.print("obj is null.")
}
}
}
と、たとえば、 {"sample_key":"sample value"}
を渡しても、
Sample().parseJson("""{"sample_key":"sample value"}""")
この場合 obj is null.
が出力される。 SampleJsonFormat
が見つからなかったからといって例外とかは出ない。
解決法の一個としては、desirialize するクラス(この例でいうと data class SampleJsonFormat
)を class Sample
の外に定義してあげると、きちんとデータが作れる。