Android gradle文件中使用json转换

这篇博客介绍了如何在 Android 的 Gradle 文件中进行 JSON 对象与字符串的相互转换,以及如何读写文件。内容包括使用 JsonOutput.toJson 和 JsonSlurper.parse 进行转换,获取当前 module 根目录的方法,以及通过 apply from 执行 Gradle 文件。博主还分享了代码实战,演示了从文件读取文本、处理后写入新文件的过程,并提到了使用 groovy API 进行文件操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.知识点:

对象转json字符串:JsonOutput.toJson(OBJ)     json(file等)转对象:new JsonSlurper().parse(file)

当前module根目录:project.projectDir

将文本写入文件:new File("").withWriter('utf-8'){ writer -> writer.write text }

执行本module下的gradle文件:apply from: project.file('*.gradle')

2.代码实战。从一个文件读取文本进行一番处理后写入另一个文件,在当前module下新建一个gradle文件:

import groovy.json.JsonOutput

class Model {
    String type
    String name
    String version
}

class LabRequirementTable {
    String version
    Map<String, ArrayList<String>> data
}

class RequirementTable {
    String version
    Map<String, ArrayList<Model>> data
}

//读取csv文件得到算法模型映射关系
def getFilesRecursive(File file, Map<String, ArrayList<String>> data) {
    List<String> text = file.readLines()
    //第一行是列名
    for (int i = 1; i < text.size(); i++) {
        String line = text.get(i)
        int separator1 = line.indexOf(",")
        int separator2 = line.indexOf(",", separator1 + 1)
        String requirement = line.substring(0, separator1)
        String modelName = line.substring(separator1 + 1, separator2)
        if (data.get(requirement) == null) {
            ArrayList<String> arrayList = new ArrayList<>()
            arrayList.add(modelName)
            data.put(requirement, arrayList)
        } else {
            ArrayList<String> arrayList = data.get(requirement)
            arrayList.add(modelName)
            data.put(requirement, arrayList)
        }
    }
}

//根据lab提供的算法模型映射表和扫描assets中的文件生成最终算法模型表
def LAB_FILE = 'src/main/java/com/bef/effectsdk/lab_requirements.csv'
File labStr = new File(
        project.projectDir, LAB_FILE)
Map<String, ArrayList<String>> map = new HashMap<>()
getFilesRecursive(labStr, map)
LabRequirementTable result = new LabRequirementTable()
result.data = map
result.version = "3.6.0"
Map<String, ArrayList<Model>> data = new HashMap<>()
def LIB_LIST_JAVA_FILE = 'src/main/java/com/bef/effectsdk/ModelsList.java'
def localModels = new File(
        project.projectDir, LIB_LIST_JAVA_FILE).getText('UTF-8')
for (Map.Entry<String, ArrayList<String>> requirement : result.data.entrySet()) {
    ArrayList<Model> arrayList = new ArrayList<>()
    for (String modelName : requirement.value) {
        Model model = new Model()
        int startIndex = modelName.indexOf("_v")
        model.name = modelName.substring(0, startIndex)
        if (localModels.contains(modelName)) {
            model.type = "asset"
            int endIndex = modelName.length() - ".model".length()
            model.version = modelName.substring(startIndex + 2, endIndex)
        } else {
            model.version = "version_not_exist"
            model.type = "not_exist"
        }
        arrayList.add(model)
    }
    data.put(requirement.key, arrayList)
}
RequirementTable requirementTable = new RequirementTable()
requirementTable.version = result.version
requirementTable.data = data

def LOCAL_REQUIREMENT_FILE = "src/main/java/com/bef/effectsdk/localAlgorithmMap.json"
def jsonStr = JsonOutput.toJson(requirementTable)
new File(project.projectDir, LOCAL_REQUIREMENT_FILE).withWriter('utf-8') { writer ->
    writer.write jsonStr
}

 

3.其他

执行指令:str.execute()。举个例子,删除文件:

"rm -rf ${project.projectDir}/src/main/assets/${modelPath}".execute()

我错了,上面这种命令行是异步的,还是要用groovy提供的API:

delete "${project.projectDir}/src/main/assets/${modelPath}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值