繁体   English   中英

在 kotlin 中将 String 转换为 JsonObject 返回 null

[英]Convert String to JsonObject in kotlin returns null

编辑找到的解决方案:

在我的代码中发现了错误。 我在单元测试中运行它,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())

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

  1. 无需对 JSON 字符串进行substring字符串化。 将它放在JSONObject ,它会正常工作。
  2. 如果您需要获取嵌套对象,请使用getJSONObjectgetJSONArray方法
  3. 在代码中显示您的content字符串(或如何加载它)

您编辑的代码

val content = "the string above"

var obj = JSONObject(content)

我运行这个函数来解析你的字符串,没关系。 您的字符串有效。 你能指定你如何初始化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")
}

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

尝试在测试中添加库

testImplementation 'org.json:json:your_version'

在此处查看版本:

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

这是基于这篇文章的答案: JSONObject 在用字符串实例化后返回“null”的非空值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM