LoginSignup
0
0

【Kotlin/Gson】jsonパース時に末尾位置でエラー

Posted at

はじめに

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をセットする対策法もあったが、私の環境では改善しなかった。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0