Listおよびhashmapを使用してJson配列オブジェクトを作成したいが、プログラム実行中に奇妙な問題に直面している。Listおよびハッシュマップを使用してJava Json配列オブジェクトを作成中に出力エラーが発生する
これは私のコードです:
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];
}
このコードは合法的に見えますが、私はこのコードを実行したときに、私は、このような結果を持つことが期待された。
[{"user":"user1","email":"[email protected]"},{"user":"user2","email":"[email protected]"}]
しかし、私が得たことはありますこの:
[{"user":"user2","email":"[email protected]"},{"user":"user2","email":"[email protected]"}]
私が把握でき、この問題に対する唯一の答えは "であることがPASS BYでありますADDRESS "であるため、Listにプッシュされた最初の結果は2番目の反復の影響を受けました。
質問:質問したい質問:誰かが私が望む結果を得る方法を知っていますか?
生データに「USER」と「MAIL」のデータができるだけ多く含まれる可能性があるため、初めに複数のHashMapを定義するように答えてもらえません。
このコードは、[MCVE]ではありません。特に 'map'がどこに定義されているかは示していません。私が推測するつもりなら、それはあなたの問題です。新しいユーザエントリの解析を開始するたびに、 'map'の新しいインスタンスを作成しているわけではありません。古いものの値はそのまま上書きされ続けます。 ( 'hmap'はおそらく' map'でしょうか?)。 – Tibrogargan
入力エラー。修正されました。 – Kaninchen
@Tibrogarganは、whileループ内のすべての反復で新しいHashMapを動的に定義する必要があることを意味しますか? – Kaninchen