【问题标题】:Convert String to JsonObject in kotlin returns null在 kotlin 中将 String 转换为 JsonObject 返回 null
【发布时间】:2019-07-31 07:58:34
【问题描述】:

编辑找到的解决方案:

在我的代码中发现错误。我在单元测试中运行它,Android 在单元测试中不使用 JSON 对象,因为它是 android 的一部分。这就是它返回 null 的原因。

问题:

我正在尝试使用 JSONObject("string") 将我的 String 转换回 JsonObject

这是我的字符串示例:

{
  "sessions": [
    {
      "locations": [
        {
          "lat": "14.2294625",
          "lng": "121.1509005",
          "time": 1560262643000,
          "speed": 0,
          "speedLimit": 0
        },
        {
          "lat": "14.2294576",
          "lng": "121.1509498",
          "time": 1560262713000,
          "speed": 0,
          "speedLimit": 0
        },
        {
          "lat": "14.2294576",
          "lng": "121.1509498",
          "time": 1560262714000,
          "speed": 0,
          "speedLimit": 0
        }
      ],
      "name": "1.5645220491E12"
    }
  ]
}

它在我的 JsonObjects 上返回 null:

content = "the string above"

var obj = JSONObject(content.substring(content.indexOf("{"), content.lastIndexOf("}") + 1))
System.out.println("obj1: " + obj.toString())

obj = JSONObject(content)
System.out.println("obj1: " + obj.toString())

var obj1 = JSONArray(content)
System.out.println("obj1: " + obj1.toString())

obj1 = JSONArray(content.substring(content.indexOf("{"), content.lastIndexOf("}") + 1))
System.out.println("obj2: " + obj1.toString())

this 的所有输出均为空。有什么方法可以知道发生了什么错误,以便我可以调整我的 json 字符串?

【问题讨论】:

  • 也许创建一个pojo模型并使用Gson库更好?还是你没有这样的机会?
  • 试试Retroft,更快更简单。
  • @SergeiMikhailovskii 这只是从本地 json 文本文件读取的简单单元测试。是的,这是可能的,但我想知道为什么这段代码不起作用。

标签: java android json kotlin


【解决方案1】:
  1. 不需要substring 你的 JSON 字符串。把它放在JSONObject 里面就可以了。
  2. 如果您需要获取嵌套对象,请使用 getJSONObjectgetJSONArray 方法
  3. 在代码中显示您的content 字符串(或如何加载它)

您编辑的代码

val content = "the string above"

var obj = JSONObject(content)

【讨论】:

  • 已经这样做了,你可以在我的代码中看到我尝试了许多不同的方法来将它转换为一个对象,它们都返回null。
  • 展示你如何加载你的字符串
【解决方案2】:

我运行这个函数来解析你的字符串,没关系。你的字符串是有效的。你能指定你如何初始化val content

 fun parseJson() {
    var stringJson = "{\"sessions\": [{\"locations\": [{\"lat\": \"14.2294625\",\"lng\": \"121.1509005\",\"time\": 1560262643000,\"speed\": 0,\"speedLimit\": 0},{\"lat\": \"14.2294576\",\"lng\": \"121.1509498\",\"time\": 1560262713000,\"speed\": 0,\"speedLimit\": 0},{\"lat\": \"14.2294576\",\"lng\": \"121.1509498\",\"time\": 1560262714000,\"speed\": 0,\"speedLimit\": 0}],\"name\": \"1.5645220491E12\"}  ]}"

    var obj = JSONObject(stringJson)
    System.out.println("obj1: $obj")
    var sessionArray: JSONArray = obj.optJSONArray("sessions")
    System.out.println("obj1: $sessionArray")
    var firstObject = sessionArray[0]
    System.out.println("obj1: $firstObject")
}

【讨论】:

    【解决方案3】:

    由于您使用 Junit 运行代码,因此它在您计算机上的 SDK 上运行。这个 SDK 不提供所有东西,有些只是一些骨架类,提供方法和文档的签名,而不是代码。所以不能直接执行。

    尝试在测试中添加库

    testImplementation 'org.json:json:your_version'
    

    在这里查看版本:

    http://mvnrepository.com/artifact/org.json/json

    这是基于这篇文章的答案:JSONObject returns a non null value of "null" after instantiating with string

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2017-07-31
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多