如何从无引号的字符串构建json对象

如何从无引号的字符串构建json对象,json,regex,kotlin,Json,Regex,Kotlin,在使用kotlin的android应用程序中,从某处收到字符串 val str = "{key1: {key2: {key3: {v1: a1, v2: a2}}}}" 当尝试验证为有效的json时,它抛出异常 val obj2 = Gson().getAdapter(JsonElement::class.java).fromJson(str) got exception: com.google.gson.stream.MalformedJsonException: Us

在使用kotlin的android应用程序中,从某处收到字符串

val str = "{key1: {key2: {key3: {v1: a1, v2: a2}}}}"
当尝试验证为有效的json时,它抛出异常

val obj2 = Gson().getAdapter(JsonElement::class.java).fromJson(str)

got exception:
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 3 path $.
我想也许先加上这句话,试过了

val result1: String = str.replace("([\\w.]+)", "\"$1\"")
val result2 = str2.replace("/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)/g", "\"$1$2\"")

两者都不添加quote和result1,result2仍然与原始str相同

如何使未加引号的json字符串成为带引号的json字符串

"{\"key1\": {\"key2\": {\"key3\": {\"a\": \"a1\"}}}}"
更新:需要将其转换为正则表达式:

val result: String = str.replace("([\\w.]+)".toRegex(), "\"$1\"")
用于:

 <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

com.google.code.gson
格森
2.8.5
例如:

package org.example

import com.google.gson.JsonObject
import com.google.gson.JsonParser

fun main(args: Array<String>) {
    val str = "{key1: {key2: {key3: {v1: a1, v2: a2}}}}"
    val jsonObject: JsonObject = JsonParser().parse(str).getAsJsonObject()
    val nestedJsonObject = jsonObject.get("key1").asJsonObject
    val key2 = nestedJsonObject.get("key2")
    println(key2);
}
package org.example
导入com.google.gson.JsonObject
导入com.google.gson.JsonParser
趣味主线(args:Array){
val str=“{key1:{key2:{key3:{v1:a1,v2:a2}}”
val jsonObject:jsonObject=JsonParser().parse(str).getAsJsonObject()
val nestedJsonObject=jsonObject.get(“key1”).asJsonObject
val key2=nestedJsonObject.get(“key2”)
println(键2);
}

据我所知,您可以使用
GsonBuilder.setLenient
方法允许不带引号的字符串。那不管用吗?管用,谢谢
val-jsonObject:jsonObject=JsonParser.parseString(str2).asJsonObject
。不知道如何使正则表达式部分工作tho。