如何将 json 文件读入 build.gradle 并使用 build.gradle 文件中的字符串值

问题描述 投票:0回答:2

例如, 读取

build.gradle
中的 json 文件并使用 json 值作为文件中的字符串

{
  "type":"xyz",
  "properties": {
    "foo": {
      "type": "pqr"
     },
     "bar": {
       "type": "abc"
     },
     "baz": {
       "type": "lmo"
     }
  }
}

我需要打电话给

properties.bar.type
abc
应该在那里更换。

我需要将这些值转换为

string
并在
build.gradle
文件中使用

gradle build.gradle gradlew
2个回答
39
投票

从 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
    }
}

0
投票

与 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"))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.