我有一个需要从Web服务器下载文件的ant构建脚本。我可以使用“get”任务逐个拉下这些文件。但是,我希望能够首先获取这些文件的列表,然后使用“get”迭代列表以下载文件。 Web服务器将以json格式报告文件列表,但我不确定如何使用ant解析json。
是否有任何允许json解析的ant插件?
答案 0 :(得分:9)
我使用了Dave的上述建议并且效果非常好。这就是我想出的:
(注意,我从我的实际构建文件中删除了这个并试图删除任何特定的东西,只留下示例部分,所以请原谅我,如果它缺少任何东西或其他什么,但它应该让你知道它是如何工作的)
<?xml version="1.0"?>
<project name="jsonExample" default="all">
<target name="all" depends="example" />
<target name="example">
<!-- This uses Rhino - an Open Source implementation of JavaScript written in Java -
to parse JSON. -->
<script language="javascript"> <![CDATA[
importClass(java.io.File);
importClass(java.io.FileReader);
importClass(java.io.BufferedReader);
importClass(java.io.FileWriter);
importClass(java.io.BufferedWriter);
var file = new File("/path/to/myJSON.js");
fr = new FileReader(file);
br = new BufferedReader(fr);
// Read the file we just retrieved from the webservice that contains JSON.
var json = br.readLine();
// Evaluate the serialized JSON
var struct = eval("(" + json + ")");
// Get the data from
var value = struct.data.VALUE;
echo = example.createTask("echo");
echo.setMessage("Value = " + value);
echo.perform();
]]>
</script>
</target>
答案 1 :(得分:5)
答案 2 :(得分:0)
这是我用来加载json-properties的宏。
<macrodef name="json-properties">
<attribute name="jsonFile"/>
<sequential>
<local name="_jsonFile"/>
<property name="_jsonFile" value="@{jsonFile}"/>
<script language="javascript">//<![CDATA[
var json = new Packages.java.lang.String(
Packages.java.nio.file.Files.readAllBytes(
Packages.java.nio.file.Paths.get(project.getProperty("_jsonFile"))), "UTF-8");
var properties = JSON.parse(json);
for(key in properties) {
project.setProperty(key, properties[key]);
}
//]]></script>
</sequential>
</macrodef>