android,当从res / raw读取文件时,context.getAssets()。open(fileName),读入的内容已损坏

问题描述 投票:0回答:1

在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个项只是第一个项的副本,因此该字符串应该没问题)

enter image description here

这里是代码,如何读取原始字符串,如何记录日志

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:。 ..

android android-resources android-assets android-resource-file
1个回答
0
投票

发现了ByteArray有64k限制的问题,因此超出范围的任何内容都已损坏。

更新了getJsonFromFile()的作品。

© www.soinside.com 2019 - 2024. All rights reserved.