Ich möchte ein JSON-Array-Objekt mit Liste und hashmap schaffen, aber ich habe einige seltsame Problem während der Programmausführung konfrontiert.Ausgangsfehler während Java Erstellen Json-Array-Objekt mit Liste und HashMap
Dies ist mein Code:
List<HashMap> list = new ArrayList<>();
HashMap<String, String> hmap = new HashMap<>();
String raw = "<CONTENT><DETAIL><USER>user1</USER><MAIL>[email protected]</MAIL></DETAIL><DETAIL><USER>user2</USER><MAIL>[email protected]</MAIL></DETAIL></CONTENT>";
String partRas = "";
int index = raw.indexof("<USER>");
while(index >= 0) {
if(index + 50 < raw.length())
partRaw = raw.subString(index, index + 50);
hmap("user", getTagValue(partRaw, "USER"));
hmap("email", getTagValue(partRaw, "MAIL"));
list.add(hmap);
raw = raw.subString(index + 50, raw.length());
index = raw.indexof("<USER>");
}
System.out.println(new Gson().toJson(list));
public static String getTagValue(String xml, String tagName){
return xml.split("<"+tagName+">")[1].split("</"+tagName+">")[0];
}
Dieser Code sieht echt, aber wenn ich diesen Code ausgeführt, war ich erwartet, dass das Ergebnis wie diese haben:
[{"user":"user1","email":"[email protected]"},{"user":"user2","email":"[email protected]"}]
aber was ich habe ist dies:
[{"user":"user2","email":"[email protected]"},{"user":"user2","email":"[email protected]"}]
Die einzige Antwort auf dieses Problem ich heraus könnte, ist "es PASS BY ADRESSE ", so wurde mein erstes Ergebnis in List von der zweiten Iteration beeinflusst.
Die Frage möchte ich fragen: jemand die Art und Weise weiß das Ergebnis, das ich wollte zu bekommen?
Ich erwarte nicht die Antwort, mir zu sagen, mehrere HashMaps am Anfang zu definieren, da meine Rohdaten mehr "" enthalten könnten, was bedeutet, dass es so viele "USER" - und "MAIL" -Daten wie möglich enthalten könnte .
Dieser Code nicht ist [MCVE]. Insbesondere zeigt es nicht, wo "map" definiert ist. Wenn ich raten würde, ist das dein Problem. Sie erstellen nicht jedes Mal eine neue Instanz von 'map', wenn Sie mit der Analyse eines neuen Benutzereintrags beginnen - so werden die Werte im alten einfach immer überschrieben. ('hmap' soll" map "sein?). – Tibrogargan
Tippfehler, jetzt wurde es korrigiert. – Kaninchen
@Tribrotargan heißt das, dass ich neue HashMap bei jeder Iteration innerhalb der While-Schleife dynamisch definieren muss? – Kaninchen