例如, 读取
build.gradle
中的 json 文件并使用 json 值作为文件中的字符串
{
"type":"xyz",
"properties": {
"foo": {
"type": "pqr"
},
"bar": {
"type": "abc"
},
"baz": {
"type": "lmo"
}
}
}
我需要打电话给
properties.bar.type
,abc
应该在那里更换。
我需要将这些值转换为
string
并在 build.gradle
文件中使用
从 Gradle 中,您可以执行任何 Groovy 代码,并且 Groovy 已经具有内置的 JSON 解析器。
例如您可以使用一个任务将您的值打印到标准输出中:
task parseJson {
doLast {
def jsonFile = file('path/to/json')
def parsedJson = new groovy.json.JsonSlurper().parseText(jsonFile.text)
println parsedJson.properties.bar.type
}
}
与 Gradle 8.3 Kotlin 一样,Kotlin 是官方 DSL 语言,如果您使用的是
buils.gradle.kts
脚本文件,我将扩展答案
Kotlin 在基础语言本身中不包含 JSON 序列化组件。您必须包含对
kotlin-serialization-json
的依赖。由于您在脚本中需要此依赖项,因此必须通过 buildscript{}
块将其包含在内。
使用 Gradle 记录器打印您的值的解决方案:
import kotlinx.serialization.json.*
import java.nio.charset.Charset
plugins {
id("base")
}
buildscript {
dependencies {
classpath("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}
}
tasks.register("readFromJson") {
doLast {
// Read json file
val jsonFile = project.file("jsonFile.json")
// Convert into immutable JSON object
val fileAsJsonObject = Json.decodeFromString<JsonObject>(jsonFile.readText(Charset.defaultCharset()));
// Read properties.bar.type and print to Gradle logger
logger.quiet("properties.bar.type value: " + fileAsJsonObject["properties"]?.jsonObject?.get("bar")?.jsonObject?.get("type"))
}
}