Java 将字符串转换为kotlin中的JsonObject将返回null

Java 将字符串转换为kotlin中的JsonObject将返回null,java,android,json,kotlin,Java,Android,Json,Kotlin,编辑找到的解决方案: 在我的代码中找到错误。我在一个单元测试中运行这个,Android在单元测试中不使用JSON对象,因为它是Android的一部分。这就是它返回null的原因。 问题: 我打算使用JsonObject(“字符串”)将字符串转换回JsonObject 以下是我的字符串示例: { "sessions": [ { "locations": [ { "lat": &q

编辑找到的解决方案:

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

问题:

我打算使用JsonObject(“字符串”)将字符串转换回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"
    }
  ]
}
在我的JSONObject上返回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字符串

  • 无需
    子字符串
    您的JSON字符串。把它放在
    JSONObject
    中,它就可以正常工作了
  • 如果需要获取整洁的对象,请使用
    getJSONObject
    getJSONArray
    方法
  • 在代码中显示
    内容
    字符串(或如何加载)
  • 您编辑的代码

    val content = "the string above"
    
    var obj = JSONObject(content)
    

    我运行这个函数来解析你的字符串,没问题。您的字符串是有效的。能否指定如何初始化
    val内容

     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'
    
    请参见此处的版本:


    这是基于这篇文章的答案:

    也许创建一个pojo模型并使用Gson库更好?或者你没有这样的机会?试试使用,它会更快更简单。@SergeiMikhailovskii这只是一个简单的单元测试,从本地json文本文件读取。是的,这是可能的,但我想知道为什么这段代码不起作用。已经这样做了,你可以在我的代码中看到,我尝试了许多不同的方法将其转换为对象,所有这些方法都返回null。显示你如何加载你的stringIt为我工作!!