2010-03-26 14 views
7

Ho uno script ant form che ha bisogno di trascinare i file da un server web. Posso usare il task "get" per estrarre questi file uno alla volta. Tuttavia, mi piacerebbe essere in grado di ottenere prima un elenco di questi file e poi scorrere l'elenco con "get" per scaricare i file. Il server web segnalerà l'elenco dei file in formato json, ma non sono sicuro di come analizzare json con form.parso json con formica

Esistono plug-in ant che consentono l'analisi json?

risposta

4

È possibile utilizzare un'attività <script> su run JavaScript to decode your JSON.

+0

Attenzione però, come la scrittura JSON dal plugin rinoceronte sembra essere problematico. Non esiste JSON.stringify e NativeJSON.stringify() sembra essere inaccessibile dal plug-in. Sto pensando di passare a jython per questo. – Joel

8

Ho usato il suggerimento di Dave sopra e ha funzionato abbastanza bene. Ecco cosa mi è venuto in mente:

(Nota, l'ho estratto dal mio vero file di build e ho cercato di rimuovere qualcosa di specifico e di lasciare solo le parti di esempio, quindi perdonami se manca qualcosa o qualsiasi cosa, ma dovrebbe dare hai un'idea di come funziona).

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

Ricevo un errore: CodeDomProvider per 'javascript' non può essere creato. Impossibile caricare il tipo "javascript" dall'assembly "NAnt.DotNetTasks, Version = 0.92.4543.0, Culture = neutral, PublicKeyToken = null". Cosa mi manca? – TDN

+0

Forse perché stai usando NAnt, e questo esempio era per Ant. Non ho idea se javascript è supportato in NAnt, ma se stai creando .NET, non sarai in grado di utilizzare nessuna delle cose di java.io. – bdetweiler

+0

Hai ragione. Sfortunatamente, non sembra che NAnt supporti javascript. Alla fine, ho usato PowerShell ConvertFrom-Json e funziona come un fascino. Grazie per aver segnalato il mio errore! – TDN

Problemi correlati