2010-03-26 9 views
7

J'ai un script de génération ant qui doit extraire des fichiers d'un serveur Web. Je peux utiliser la tâche "get" pour retirer ces fichiers un par un. Cependant, j'aimerais être en mesure d'obtenir une liste de ces fichiers d'abord, puis itérer sur la liste avec "get" pour télécharger les fichiers. Le serveur web rapportera la liste des fichiers au format json, mais je ne suis pas sûr de savoir comment analyser json avec ant.parse json avec ant

Existe-t-il des plugins ant permettant l'analyse JSON?

Répondre

4

Vous pouvez utiliser une tâche <script> pour run JavaScript to decode your JSON.

+0

Attention cependant, que l'écriture JSON du plugin rhinocéros semble être problématique. Il n'y a pas de JSON.stringify et NativeJSON.stringify() semble inaccessible depuis le plug-in. Je pense à passer à Jython à cause de cela. – Joel

8

J'ai utilisé la suggestion de Dave ci-dessus et ça a très bien marché. Voici ce que je suis venu avec:

(Note, j'ai arraché cela de mon fichier de construction réel et j'ai essayé de supprimer quelque chose de spécifique et de laisser les parties d'exemple, alors pardonnez-moi s'il manque quelque chose ou quoi que ce soit, mais ça devrait vous une idée de comment cela fonctionne).

<?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> 

+0

Je reçois une erreur: CodeDomProvider pour 'javascript' n'a pas pu être créé. Impossible de charger le type 'javascript' de l'assembly 'NAnt.DotNetTasks, Version = 0.92.4543.0, Culture = neutre, PublicKeyToken = null'. Qu'est-ce que je rate? – TDN

+0

Peut-être parce que vous utilisez NAnt, et cet exemple était pour Ant. Je n'ai aucune idée si javascript est supporté dans NAnt, mais si vous construisez .NET, vous ne pourrez pas utiliser les trucs de java.io. – bdetweiler

+0

Vous avez raison. Malheureusement, il ne semble pas que NAnt supporte javascript. À la fin, j'ai utilisé PowerShell ConvertFrom-Json et cela fonctionne comme un charme. Merci d'avoir signalé mon erreur! – TDN