在Android上,使用com.google.gson:gson:2.8.5,
[当传递一个josnString并且当json大时(例如,当字符串长度为669304时注意到,它得到了]]
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated string at line 2902 column 564904 path $.items.result[10].quoted_status.full_text
或其他错误:
json具有子json字符串数组,结构类似
{ "items": { "result": [ {subJsonString...}, {subJsonString...}, ... ] } }
并且json字符串存储在res / raw / jsonstring.txt中,并在运行时读取,然后再进行反序列化。
如果减少数组中的子json元素(即数组中的10个项目或更少),则工作正常,而各个json元素字符串均正常工作。但是,当数组中有更多项目时,它将开始引发。
update:
从res / raw读取json字符串似乎有问题再看一下当有更多项目时,日志显示从res / raw / jsonString.txt读取的输出json字符串已损坏。在将第11个子项添加到json字符串数组后,它在特定点显示000000000 ...(遇到问题的第11个项只是第一个项的副本,因此该字符串应该没问题)这里是代码,如何读取原始字符串,如何记录日志
val jsonStr = getJsonFromFile(context, "res/raw/jsoninraw.txt") returnedModel = gson.fromJson<T>(jsonStr, dataClassType) ...... fun getJsonFromFile(context: Context?, fileName: String): String? { val json: String try { val inputStream: InputStream = context.getAssets().open(fileName) val size = inputStream.available() val buffer = ByteArray(size) inputStream.use { it.read(buffer) } json = String(buffer) } catch (ioException: IOException) { ioException.printStackTrace() return null } return json .also { logString(it) } } fun logString(jsonStr: String) { val chunkSize = 512 var i = 0 while (i < jsonStr.length) { Log.e("+++", jsonStr.substring(i, Math.min(jsonStr.length, i + chunkSize))) i += chunkSize } }
将json字符串反序列化为模型的更好方法是什么?
在Android上,使用com.google.gson:gson:2.8.5,当传递josnString且json较大时(例如,在字符串长度为669304时注意到),它得到com.google.gson.JsonSyntaxException:。 ..
发现了ByteArray有64k限制的问题,因此超出范围的任何内容都已损坏。
更新了getJsonFromFile()的作品。