Espressione regolare per rimuovere commenti da un file json

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Espressione regolare per rimuovere commenti da un file json

Messaggio da ilmich »

Ciao a tutti,

come da oggetto sto sviluppando un progetto in java che sfrutta il formato json per i file di configurazione.
Col senno di poi avrei fatto tutto in xml, ma java e xml sono un'accoppiata relativamente e inutilmente complicata :D
Ad ogni modo, il problema che ho con questo formato è che essendo nato prevalentemente per lo scambio di dati non contempla l'utilizzo di parti commentate. Questo un po' mi limita nel contesto in cui lo utilizzo perchè mi sarebbe utile avere dei file di configurazione con porzioni commentate.

La soluzione che ho pensato è quella di leggere il file in una stringa, manipolarla con una espressione regolare e darla poi in pasto al parser json.
L'espressione regolare dovrebbe eliminare i pezzi indesiderati secondo le seguenti due regole
  • dal primo carattere '#` fino a fine linea
  • dalla prima sequenza di caratteri '/*' fino a '*/'
.. essendo una schiappa con le espressioni regolari, mi date qualche dritta su come scriverla?!?!

grazie in anticipo
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Espressione regolare per rimuovere commenti da un file j

Messaggio da 414N »

Prima di tuffarci nel meraviglioso mondo delle espressioni regolari, posso chiederti se hai pensato ad altre alternative oltre a JSON e XML?
Se il progetto è tutto in Java la prima opzione che mi viene in mente è un file di proprietà (ovvero un insieme di chiavi-valori in formato testo) facilmente gestiti dalle API Java (vedi questo tutorial ufficiale).
Un'altra alternativa, più "omnicomprensiva" delle proprietà sarebbe lo sfruttamento delle Preferences API, che includono un backend di storage per rendere persistenti (in maniera platform dependent su ogni piattaforma) le preferenze specificate. Trovi un esempio qua, nella documentazione ufficiale di Java (sono in giro dalla versione 1.4, come puoi vedere dal link) e, se ti servisse, posso mostrarti del codice relativo al loro impiego.

Avatar utente
invalid_packet
Packager
Packager
Messaggi: 15
Iscritto il: gio 17 mag 2012, 8:40
Nome Cognome: Giuseppe Manzo
Slackware: 13.37
Kernel: 2.6.37.6
Località: Torino

Re: Espressione regolare per rimuovere commenti da un file j

Messaggio da invalid_packet »

Potresti anche pensare ad inserire un parametro di nome "description" o "comment" o "remark" fra i dati stessi.

Qualcosa tipo:

Codice: Seleziona tutto


{
    "fieldname":"nome",
    "key":"true",
    "index":"0",
    "description":"a short description"
}


ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Espressione regolare per rimuovere commenti da un file j

Messaggio da ilmich »

@414n la scelta tecnica è stata fatta in base ad un semplice concetto... semplicità! non conoscevo le Preference Api pero' espresso in altri termini volevo avere un pojo da utilizzare come configurazione, che mi consentisse di non dover fare refactoring esteso, almeno per la parte di caricamente da file.
attualmente tramite Google GSON il caricamento del file di configurazione viene gestito da un metodo banale simil questo

Codice: Seleziona tutto

public static void loadFromFile(String file, Type type) {
	File confFile = new File(file);
	Reader conf = null;
	Gson gs = new Gson();
	Object confObj = null;
	try {
	    conf = Files.newReader(confFile, Charset.forName("UTF-8"));
	    confObj = gs.fromJson(conf, type);
	    configuration = confObj;
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    try {
		if (conf != null)
		    conf.close();
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	}
    }
Ti ripeto, non conosco le refactoring api, ma in questo modo posso:
  • disaccoppiare l'oggetto configurazione, con lo storage.. che a sto punto puo' essere qualsiasi cosa (nello specifico il progetto in questione è un server smtp.. quindi per configurare il connettore, potrei tecnicamente includere nella configurazione l'oggetto java che lo definisce.. senza gestire travasi properties -> oggetto di nessun tipo.)
  • se aggiungo una flag, non devo curarmi dello storage.. basta aggiundere un campo nel json e ovviamente modificare il codice che utilizza sta configurazione
  • posso gestire diversi file di configurazione in un colpo solo.. e senza l'onere di dover configurare il sistema di configurazione.. che soprattutto in java è una cosa che mi urta assai.. ovvero complicare l'incomplicabile
@invalid_packet mi sa che forse mi sono spiegato male.. io intendo commentare come possibilità di avere roba tipo

Codice: Seleziona tutto

{
	"port":9999,
	"workers":120,
	"maxConnections":100,
	"mailDir":"outmail",
	"sessionConfig":{
					"mail.user":"bart",
					"mail.host":"example.org"
                                        # questo parametro è commentato.. decommentare in produzione
                                        # "mail.host":"pippopluto.org"
					}
         }
che venga visto in modo corretto:D
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Rispondi