【问题标题】:Using JSONObject in Kotlin always throws an error在 Kotlin 中使用 JSONObject 总是会抛出错误
【发布时间】:2020-02-03 10:58:50
【问题描述】:

我知道这个问题被问了数百次,我检查了 30 多个答案,但没有一个对我有用。

我正在使用 Kotlin 在 android studio 中运行单元测试。我正在尝试使用String 构建JSONObject

我用来构建简单 json 对象的方法总是抛出 Cannot evaluate org.json.JSONObject.toString()

我使用的字符串肯定具有有效的 Json 格式

这是android中的错误还是什么??

这是我正在使用的方法:

fun createTaskJson(): JSONObject {
    val jsonString =
        "{\"id\":138,\"title\":\"G0102-025\",\"type\":\"New Land Evaluation\",\"taskCreationDate\":\"28/01/2020\",\"taskDeliveryDate\":\"02/02/2020\",\"taskCreationTime\":\"05:15 AM\"}"
    val realJson = JSONObject(jsonString)
    return realJson
}

更新 1: 请注意,创建一个空的JSONObject 也会抛出同样的错误!!

更新 2:

查看stacktrace后发现如下错误:

Method toString in org.json.JSONObject not mocked.

我用谷歌搜索了它,解决方案是将以下配置添加到我的 build.gradle 文件中:

    testOptions {
    unitTests.returnDefaultValues = true
}

但是添加这个会使返回的JSONObject null 而不是抛出异常,即使我的字符串格式正确。

【问题讨论】:

  • 您的代码对我来说工作正常,所以我在字符串中看不到任何问题。不如试试Gson 看看那里是否也有错误。当我这样做时它也可以正常工作:Gson().fromJson("your string", HashMap::class.java)
  • @VarunRaj 是的,我已经检查过了,但它对我不起作用
  • 我认为您应该使用stackoverflow.com/a/47283450/7436566 这种方式来创建 JSON 对象,因为您已经知道 JSON 键。
  • @omz1990 是的,您提到的 Gson 方法有效。并返回一个哈希映射,其中包含值。但如果你说你机器上的相同代码没有问题,那么我的项目/配置或类似的东西有问题

标签: android kotlin


【解决方案1】:

在上述问题中提到的更新之后。经过大量搜索。我发现了以下内容:

解决方案是将以下行添加到build.gradle 文件中:

implementation group: 'org.json', name: 'json', version: '20190722'

我不知道为什么,但这就像android有一个名称为JSONArrayJSONObject的对象,但是当将implementation添加到build.gradle文件时。它以另一种方式处理JSONObjectJSONArray

因为将语句添加到gradle文件后,android会给出以下警告:

json 定义与 Android 现在提供的类冲突的类

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多