soluzione Regex
Si potrebbe utilizzare REGEX per rimuovere qualsiasi linea dai dati che conatins un "", [], o {} prima si analizza lo con JSONParser.
Il regex per qualcosa di simile sarebbe simile. Tenete a mente che potrebbe essere necessario regolare il carattere di nuova riga seconda del sistema operativo
[^\n]*(\"(\n)*\"|\[(\n)*\]|\{(\n)*\})[^\n]*
Per tenere conto di un caso in cui i dati JSON è la seguente
{
"models":{},
"path":[
{
"path":"/web-profiles",
"operations":[
{
"nickname":"",
"type":"",
"responseMessages":[]
}
]
}
],
"produces":[]
}
La prima volta che si esegue che replaceAll il risultato sarà con
{
"path":[
{
"path":"/web-profiles",
"operations":[
{
}
]
}
],
}
Ora abbiamo una JSONObject vuoto all'interno delle "operazioni" JSONArray. Quindi questa funzione replaceAll deve essere chiamata di nuovo fino a quando la stringa JSON non ha alcuna modifica dal suo stato precedente.
Ricordare che se si utilizzano funzioni come readLine() durante l'immissione dei dati, è possibile rimuovere il carattere di fine riga che renderà questo metodo non funzionante. Quindi risolvere questo sostituisci la tua riga di lettura con questo.
json += in.readLine() + '\n';
Ecco un rapido programma che ho scritto che esegue la rimozione effettiva di oggetti JSON vuoti dalla stringa originale.
public static void main(String[] args){
// String from above example with newline characters intact
String json = "{\n\"models\":{},\n\"path\":[\n{\n\"path\":\"/web-profiles\",\n\"operations\":[\n{\n\"nickname\":\"\",\n\"type\":\"\",\n\"responseMessages\":[]\n}\n]\n}\n],\n\"produces\":[]\n}";
// Value from the last iteration of the while loop
String last = "";
// If there was no change from the last replaceAll call stop
while(!last.equals(json)){
last = json;
// Same regex as above just escaped to work in a Java String
json = json.replaceAll("[^\\n]*(\\{(\\n)*\\}|\\\"(\\n)*\\\"|\\[(\\n)*\\])[^\\n]*\\n","");
}
System.out.println(json);
}
possibili duplicati di http://stackoverflow.com/a/23921129/2369266 –