initial: nsJson plugin 1.1.3

This commit is contained in:
2026-04-29 23:19:40 +02:00
commit 0947690677
61 changed files with 10173 additions and 0 deletions
+270
View File
@@ -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.*