はじめに
jsonパース時に末尾位置でのJsonSyntaxException
エラー対処方法について記述。
原因
末尾にNUL(\0)
文字があることでエラーが発生。
fun main() {
//Webから取得したjson文字列
val json = "{ \"value\":\"hoge\" }\u0000"
//パース時にエラー発生
val testClass = Gson().fromJson(json, TestClass::class.java)
println("[Test]value:" + testClass.value)
}
class TestClass {
var value: String? = null
}
対策
対策1: JavaのtrimメソッドでNUL(\0)
文字を削除
json文字列をjava.lang.Stringに変換し、trimメソッドを使用することでNUL(\0)
文字が削除される。KotlinのtrimメソッドだとNUL(\0)
文字が削除されないので注意。
fun main() {
//Webから取得したjson文字列
val json = "{ \"value\":\"hoge\" }\u0000"
//JavaのStringに変換してtrim
val testClass = Gson().fromJson(java.lang.String(json).trim(), TestClass::class.java)
println("[Test]value:" + testClass.value)
}
対策2: trim { it == Char.MIN_VALUE }でNUL(\0)
文字を削除
trim { it == Char.MIN_VALUE }でNUL(\0)
文字を削除。
fun main() {
//Webから取得したjson文字列
val json = "{ \"value\":\"hoge\" }\u0000"
//trimでNULを削除
val testClass = Gson().fromJson(json.trim { it == Char.MIN_VALUE }, TestClass::class.java)
println("[Test]value:" + testClass.value)
}
補足
stackoverflowにはGsonにLenient
をセットする対策法もあったが、私の環境では改善しなかった。
参考記事