ho a che fare con i sistemi che manipolano i dati JSON "rilassato", che comprende la linea di shell in stile #
commenti:Processing commenti guscio in stile in JSON
[
{
# Batman
"first-name": "Bruce",
"last-name": "Wayne"
},
{
# Superman
"first-name": "Clark",
"last-name": "Kent"
}
]
La parte del sistema su cui sto lavorando usi json-lib - che sono sorpreso di scoprire è tollerante nei commenti stile shell - per analizzare l'input JSON.
ho bisogno di estrarre alcune annotazioni aggiuntive da tali osservazioni, ma JSON-lib sembra disfarsene appena senza fornire un'API per la loro lettura:
JSONObject map = (JSONObject)JSONSerializer.toJSON("{\n"+
" # Batman\n" + // note the shell-style # comment
" \"first-name\": \"Bruce\",\n" +
" \"last-name\": \"Wayne\"\n" +
"}");
System.out.println(map.toString());
/* <<'OUTPUT'
* {"first-name":"Bruce","last-name":"Wayne"}
* OUTPUT
* note the absence of the shell-style comment
*/
Questo ha senso dal momento che i commenti non fanno parte del JSON spec e io sono fortunato che json-lib non si limita a soffocare quando li analizza in primo luogo.
Di nota:
- altri sistemi consumano questo stesso JSON e le annotazioni devono essere trasparenti per loro, pertanto la struttura JSON non può essere modificato aggiungendo proprietà per i commenti invece.
- non tutti i componenti e gli oggetti nel mio sistema hanno accesso all'origine JSON non elaborata: un componente legge il file e lo analizza utilizzando JSONlib e passa mappe de-serializzate ecc.
Come è possibile leggere e analizzare questi commenti durante l'elaborazione dell'ingresso JSON? C'è una libreria che mi permetterà di leggerli e collegarli alla loro posizione nel JSON - posso collegare facilmente il commento Batman
alla voce "Bruce Wayne"?
Attualmente sto usando json-lib, ma sono aperto a indagare su altre librerie JSON e altrettanto aperto all'uso di altri linguaggi che estendono JSON, come YAML - ma non sono sicuro che quegli strumenti mi permetteranno di leggere ed elaborare i commenti nel mio input.
http://www.lifl.fr/~riquetd/parse-a-json-file-with-comments.html Questo collegamento utilizza regex: ''(^)? [^ \ S \ n] */(?: \ * (. *?) \ */[^ \ S \ n] * |/[^ \ n] *) ($)? ''Per rimuovere i commenti. Naturalmente puoi usare la stessa espressione regolare per altri scopi. –
@remyabel - Non tutti i componenti e gli oggetti nel mio sistema hanno accesso all'origine JSON non elaborata: un componente legge il file e lo analizza utilizzando JSONlib e passa mappe de-serializzate ecc. –
potresti sempre non mettere dati significativi in una posizione "buttare via"? proprio come non immagazzino le cose importanti nel bidone della spazzatura fuori da casa mia ... – jtahlborn