initial: nsJson plugin 1.1.3
This commit is contained in:
+270
@@ -0,0 +1,270 @@
|
||||
# nsJSON NSIS plug-in
|
||||
|
||||
Autori: Stuart 'Afrow UK' Welch, Pieter Dewachter
|
||||
|
||||
Data: 10 Ottobre 2024
|
||||
|
||||
Versione: 1.1.1.1
|
||||
|
||||
Plugin NSIS per il parsing, la manipolazione e la generazione di JSON (JavaScript Object Notation).
|
||||
|
||||
Vedi Examples\nsJSON\*.
|
||||
|
||||
## Informazioni su JSON
|
||||
|
||||
Vedi http://www.json.org/ per informazioni su JSON, sintassi e sequenze di escape.
|
||||
|
||||
## Informazioni importanti
|
||||
|
||||
Tutte le funzioni del plug-in impostano il flag di errore NSIS in caso di errore. Per le funzioni che restituiscono un valore sullo stack, nessun elemento viene restituito se il flag di errore è stato impostato. Usare `IfErrors` o `${If} ${Errors}` per verificare che una chiamata sia riuscita prima di fare Pop di un valore.
|
||||
|
||||
Il plug-in supporta tutte le sequenze di escape nei valori stringa:
|
||||
`\r`, `\n`, `\t`, `\b`, `\f`, `\"`, `\\` e `\uXXXX`
|
||||
|
||||
`[NodePath]`, usato in questo readme, è qualsiasi lista di chiavi e indici separati da spazi (gli indici sono preceduti da /index). Per esempio:
|
||||
|
||||
```
|
||||
{
|
||||
"node1": {
|
||||
"node2": false,
|
||||
"node3": [ "Stuart", 1, { "node4": "Welch", "node5": "" }, 32.5, [ 0, "test", false ] ]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Esempi di percorsi nodo in questo JSON:
|
||||
|
||||
"node1" "node2"
|
||||
- Percorso per "node2" (valore: false)
|
||||
- `nsJSON::Get "node1" "node2" /end`
|
||||
|
||||
"node1" "node3" /index 0
|
||||
- Percorso per il primo elemento di "node3" (valore: "Stuart")
|
||||
- `nsJSON::Get "node1" "node3" /index 0 /end`
|
||||
|
||||
Più alberi JSON possono essere manipolati contemporaneamente. Aggiungere `/tree NomeAlbero` prima degli altri argomenti per specificare quale albero JSON si sta manipolando.
|
||||
|
||||
## Lettura di file JSON
|
||||
|
||||
`nsJSON::Set [/tree Albero] [NodePath] /file [/unicode] "percorso\input.json"`
|
||||
|
||||
Carica il JSON dal file dato nel nodo specificato. Specificare `/unicode` se il file è Unicode.
|
||||
|
||||
---
|
||||
|
||||
`nsJSON::Set [/tree Albero] /file [/unicode] "percorso\input.json"`
|
||||
|
||||
Carica il JSON dal file dato in memoria, sovrascrivendo qualsiasi albero JSON esistente.
|
||||
|
||||
## JSON da richieste HTTP
|
||||
|
||||
`nsJSON::Set [/tree Albero] [NodePath] /http AlberoConfig`
|
||||
|
||||
Esegue una richiesta HTTP e carica la risposta JSON nel nodo dato. L'AlberoConfig specifica la configurazione della richiesta in formato JSON. I valori possibili sono:
|
||||
|
||||
**"Url"**: "http://..."
|
||||
- L'URL della richiesta. Obbligatorio.
|
||||
|
||||
**"Verb"**: "GET"
|
||||
- Il verbo della richiesta (GET, POST, ecc.). Default: GET.
|
||||
|
||||
**"Params"**: "..."
|
||||
- Parametri opzionali da aggiungere all'URL (dopo ?).
|
||||
|
||||
**"Data"**: "..."
|
||||
- Dati opzionali da inviare (tipicamente con POST).
|
||||
|
||||
**"Headers"**: "..."
|
||||
- Header aggiuntivi da inviare.
|
||||
|
||||
**"Agent"**: "nsJSON NSIS plug-in/1.0.x.x"
|
||||
- La stringa dell'agente della richiesta.
|
||||
|
||||
**"Decoding"**: false
|
||||
- Abilita la decompressione GZIP automatica.
|
||||
|
||||
**"Async"**: true
|
||||
- Esegue la richiesta in modo asincrono. Usare la funzione Wait per attendere il completamento.
|
||||
|
||||
## JSON dall'esecuzione di applicazioni console
|
||||
|
||||
`nsJSON::Set [/tree Albero] [NodePath] /exec AlberoConfig`
|
||||
|
||||
Esegue un'applicazione console e carica l'output nel nodo dato. I valori possibili della configurazione:
|
||||
|
||||
**"Path"**: "$INSTDIR\ConsoleApp.exe"
|
||||
- Percorso all'eseguibile. Obbligatorio.
|
||||
|
||||
**"Arguments"**: ...
|
||||
- Argomenti della riga di comando.
|
||||
|
||||
**"WorkingDir"**: "..."
|
||||
- Directory di lavoro.
|
||||
|
||||
**"Input"**: ...
|
||||
- Input da scrivere su STDIN.
|
||||
|
||||
**"Async"**: true
|
||||
- Esegue in modo asincrono.
|
||||
|
||||
## Modifica del JSON
|
||||
|
||||
`nsJSON::Set [/tree Albero] [NodePath] /value "Valore"`
|
||||
|
||||
Imposta il valore del nodo dato. Il valore può essere un singolo valore o codice JSON. Il nodo viene creato se non esiste.
|
||||
|
||||
---
|
||||
|
||||
`nsJSON::Delete [/tree Albero] [NodePath] /end`
|
||||
|
||||
Elimina l'albero o il nodo dato. `/end` deve essere aggiunto alla fine della lista.
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
nsJSON::Quote [/unicode] [/always] Valore
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Racchiude il valore dato tra virgolette se necessario e fa l'escape dei caratteri che lo richiedono.
|
||||
|
||||
---
|
||||
|
||||
`nsJSON::Sort [/tree Albero] [NodePath] [/options Opzioni] /end`
|
||||
|
||||
Ordina il nodo dato. Sommare i seguenti valori per le opzioni di ordinamento:
|
||||
|
||||
1. Ordine decrescente.
|
||||
2. Ordinamento numerico.
|
||||
4. Ordinamento case-sensitive.
|
||||
8. Ordina per chiavi anziché per valori.
|
||||
16. Ordina ricorsivamente tutti i nodi nell'albero.
|
||||
|
||||
## Lettura di valori JSON
|
||||
|
||||
```
|
||||
nsJSON::Get [/tree Albero] [/noexpand] [NodePath] /end
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Ottiene il valore del nodo dato. `/end` deve essere aggiunto alla fine della lista.
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
nsJSON::Get [/tree Albero] /type [NodePath] /end
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Ottiene il tipo di valore del nodo dato: "node", "array", "string", "value" o stringa vuota se il nodo non esiste.
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
nsJSON::Get [/tree Albero] /keys [NodePath] /end
|
||||
Pop $VarKeyCount
|
||||
Pop $VarKey1
|
||||
Pop $VarKeyN
|
||||
```
|
||||
|
||||
Ottiene le chiavi del nodo dato.
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
nsJSON::Get [/tree Albero] /count [NodePath] /end
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Ottiene il numero di nodi figli o elementi di un array.
|
||||
|
||||
## Generazione JSON
|
||||
|
||||
```
|
||||
nsJSON::Serialize [/tree Albero] [/format]
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Serializza l'albero JSON corrente in `$Var`. Aggiungere `/format` per formattare l'output.
|
||||
|
||||
---
|
||||
|
||||
`nsJSON::Serialize [/tree Albero] [/format] /file [/unicode] "percorso\output.json"`
|
||||
|
||||
Serializza l'albero JSON corrente nel file dato.
|
||||
|
||||
## Attesa di task asincroni
|
||||
|
||||
```
|
||||
nsJSON::Wait Albero [/timeout TimeoutInMillisecondi]
|
||||
Pop $Var
|
||||
```
|
||||
|
||||
Verifica se il task asincrono in esecuzione nell'albero JSON dato è terminato.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Differenze nella versione personale
|
||||
|
||||
Questa versione è basata sul rilascio ufficiale v1.1.1.1 da [GitHub](https://github.com/Pieter-Dewachter/nsJSON/releases/tag/v1.1.1.1).
|
||||
|
||||
### Nuova architettura supportata: x64 (amd64-unicode)
|
||||
|
||||
L'originale v1.1.1.1 supporta solo:
|
||||
- x86-ansi
|
||||
- x86-unicode
|
||||
|
||||
La versione personale aggiunge il supporto per:
|
||||
- **amd64-unicode** (x64)
|
||||
|
||||
### Progetto Visual Studio
|
||||
|
||||
L'originale includeva:
|
||||
- `Contrib/nsJSON/nsJSON.sln` - Solution VS2012
|
||||
- `Contrib/nsJSON/nsJSON.vcxproj` - Progetto VS2012 (solo x86)
|
||||
- `Contrib/nsJSON/ConsoleApp/ConsoleApp.vcxproj` - App di test
|
||||
|
||||
La versione personale usa lo stesso progetto aggiornato per VS2022 con supporto x64.
|
||||
|
||||
### File aggiunti (infrastruttura di build)
|
||||
|
||||
- `build_plugin.cmd` - Script per compilare il plugin
|
||||
- `build_plugin.py` - Script Python per compilare il plugin per tutte le architetture
|
||||
- `BUILD_README.md` - Documentazione di compilazione
|
||||
- `.gitignore` - File di esclusione Git
|
||||
|
||||
### File rimossi
|
||||
|
||||
I file DLL precompilati sono stati rimossi dalla distribuzione (vengono generati dalla compilazione):
|
||||
|
||||
- `Plugins/x86-ansi/nsJSON.dll`
|
||||
- `Plugins/x86-unicode/nsJSON.dll`
|
||||
|
||||
### Modifiche funzionali
|
||||
|
||||
Nessuna modifica funzionale rispetto all'originale. Le modifiche riguardano solo l'infrastruttura di build e il supporto x64.
|
||||
|
||||
### Compilazione
|
||||
|
||||
```cmd
|
||||
cd nsJson
|
||||
python build_plugin.py
|
||||
```
|
||||
|
||||
I DLL vengono copiati in `plugins/{platform}/nsJSON.dll`.
|
||||
|
||||
### Opzioni build
|
||||
|
||||
```powershell
|
||||
python build_plugin.py --config x86-unicode # Solo un'architettura (x86-ansi|x86-unicode|amd64-unicode|all)
|
||||
python build_plugin.py --toolset 2026 # Toolset specifico (2022|2026|auto)
|
||||
python build_plugin.py --jobs 4 # Numero di job MSBuild paralleli (default: CPU count)
|
||||
python build_plugin.py --clean # Pulizia dist/ prima della build
|
||||
python build_plugin.py --install-dir "C:\NSIS\Plugins" # Copia in directory NSIS aggiuntiva
|
||||
python build_plugin.py --verbose # Output MSBuild esteso
|
||||
python build_plugin.py --version # Stampa versione ed esce
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*See [README.md](README.md) for the English version.*
|
||||
Reference in New Issue
Block a user