2016-05-12 16 views
0

Ich erhielt JSON-Objekt und analysierte es.Wie kann ich ArrayList mithilfe von HashMap mehrere Werte zuweisen?

Die Daten sind wie folgt.

[Parsed_showinfo_2 @ 0x9b4da80] n:88 pts:17425897 pts_time:726.079 pos:149422375 fmt:rgb24 sar:405/404 s:640x360 i:P iskey:1 type:I checksum:48E13810 plane_checksum:[48E13810] 
[Parsed_showinfo_2 @ 0x9b4da80] n:89 pts:17471943 pts_time:727.998 pos:149646339 fmt:rgb24 sar:405/404 s:640x360 i:P iskey:0 type:P checksum:1AAD40E0 plane_checksum:[1AAD40E0] 
[Parsed_showinfo_2 @ 0x9b4da80] n:90 pts:17503975 pts_time:729.332 pos:149806608 fmt:rgb24 sar:405/404 s:640x360 i:P iskey:1 type:I checksum:3DA5F0DB plane_checksum:[3DA5F0DB] 

Und dann habe ich die Daten mit JSONParser() Parsen, weil ich Punkte benötigen, pts_time Werte.

FileInputStream fstream = new FileInputStream("myfile"); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader buff = new BufferedReader(new InputStreamReader(in)); 

//Which type put to ? 
HashMap<String, ?> map = new HashMap<String, ?>(); 
//Should I use ArrayList too? 
//ArrayList<HashMap<String, ?>> list = new ArrayList<HashMap<String, ?>>(); 

try { 
    while (strLine = buff.readLine()) != null) { 
     s = strLine.split(" "); 
     pts = Long.parseLong(s[4].split(":")[1]); 
     ptstime = s[5].split(":")[1]; 
    } 
} catch (IOException ex) { } 

Ich möchte mehrere Array in der While-Schleife, und Ergebniswert zurückgeben.

So:

["pts": {1, 2, 3, 4, 5}, "ptstime": {10.11, 13.003, 15.12, 16.53, 18.10}] 

Die pts und ptstime sind die Schlüssel.

Wie kann ich Codierung in der while-Schleife

+0

Wo ist das Objekt JSON? Wo rufst du den JSON-Parser an? Was liest du aus der Datei? Und warum über 'DataInputStream'? – Thilo

+0

Sie können einfach die Werte in die Hash-Map nach der Schleife hinzufügen, –

Antwort

1

Hier ist, wie Sie es tun können:

Map<String, List<Object>> map = new HashMap<>(); 
... 
while (strLine = buff.readLine()) != null) { 
    s = strLine.split(" "); 
    pts = Long.parseLong(s[4].split(":")[1]); 
    List<String> listPts = map.get("pts"); 
    if (listPts == null) { 
     listPts = new ArrayList<>(); 
     map.put("pts", listPts); 
    } 
    listPts.add(pts); 
    // Here apply the same logic to the rest 
} 

Aber ein besserer Ansatz könnte eine List von Map stattdessen zu verwenden sein, wie folgt aus:

List<Map<String, Object>> list = new ArrayList<>(); 
while (strLine = buff.readLine()) != null) { 
    s = strLine.split(" "); 
    Map<String, String> map = new HashMap<>(); 
    list.add(map); 
    pts = Long.parseLong(s[4].split(":")[1]); 
    map.put("pts", pts); 
    // Here apply the same logic to the rest 
} 
+0

vielen Dank. Ich habe HashMap wie deinen Code verwendet. :) – ofleaf

+0

@ofleaf gute Nachrichten –

1

Was die DataInputStream für ist, wie Sie es verwenden, nur als Argument für die InputStreamReader, die FileInputStream sollte schon gut sein.

Zu Ihrer Frage, ich denke, was Sie wollen

ist
Map<String, List<?>> map = new HashMap<>(2); 
map.put("pts", new ArrayList<Long>()); 
map.put("ptstime", new ArrayList<Long>()); 

Und dann in der while-Schleife etwas wie

map.get("pts").add(pts.toString()); 
map.get("ptstime").add(ptstime); 
Verwandte Themen