From 8e66c7ed6691917e9f12da291df002a1e65c8970 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:47:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/help/source/BookSourceExtensions.kt | 4 +-- .../io/legado/app/utils/GsonExtensions.kt | 27 +++++++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt index 2830e3ddd..bae097215 100644 --- a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt +++ b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt @@ -64,8 +64,8 @@ suspend fun BookSource.exploreKinds(): List { } } if (ruleStr.isJsonArray()) { - GSON.fromJsonArray(ruleStr).getOrThrow().let { - kinds.addAll(it.filterNotNull()) + GSON.fromJsonArray(ruleStr).getOrThrow().let { + kinds.addAll(it) } } else { ruleStr.split("(&&|\n)+".toRegex()).forEach { kindStr -> diff --git a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt index 4ea23f2a9..a7b03ec85 100644 --- a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt @@ -65,10 +65,13 @@ inline fun Gson.fromJsonArray(json: String?): Result> { if (json == null) { throw JsonSyntaxException("解析字符串为空") } - fromJson( - json, - TypeToken.getParameterized(List::class.java, T::class.java).type - ) as List + val type = TypeToken.getParameterized(List::class.java, T::class.java).type + val list = fromJson(json, type) as List + if (list.contains(null)) { + throw JsonSyntaxException("存在null") + } + @Suppress("UNCHECKED_CAST") + list as List } } @@ -88,10 +91,13 @@ inline fun Gson.fromJsonArray(inputStream: InputStream?): Result + val type = TypeToken.getParameterized(List::class.java, T::class.java).type + val list = fromJson(reader, type) as List + if (list.contains(null)) { + throw JsonSyntaxException("存在null") + } + @Suppress("UNCHECKED_CAST") + list as List } } @@ -150,6 +156,7 @@ class IntJsonDeserializer : JsonDeserializer { null } } + else -> null } } @@ -182,6 +189,7 @@ class MapDeserializerDoubleAsIntFix : } return list } + json.isJsonObject -> { val map: MutableMap = LinkedTreeMap() @@ -193,15 +201,18 @@ class MapDeserializerDoubleAsIntFix : } return map } + json.isJsonPrimitive -> { val prim = json.asJsonPrimitive when { prim.isBoolean -> { return prim.asBoolean } + prim.isString -> { return prim.asString } + prim.isNumber -> { val num: Number = prim.asNumber // here you can handle double int/long values