2017-07-23 2 views
1

ich eine map1 haben, die die Informationen als [40256942,6] [60246792,5] JetztKarte, um mehrere Sätze von Schlüssel zu halten und Werte

hält, dass ich eine map2 vorbereiten möchten, die Informationen wie

hält
itemNo, 40256942 
qty, 6 


itemNo, 60246792 
qty, 5 

letzte Informationen als json

“partialArticlesInfo”: [{itemNo:”40256942”, availQty:”6”}, {itemNo:”60246792”, availQty:”5”}] 

ich versuche map1 vorzubereiten zu iterieren Werte abzurufen und festgelegt, dass gegen den Schlüssel. Aber ich bekomme nur einen Eintrag, der der letzte ist. Gibt es eine Möglichkeit, erhalte ich die neue Karte mit Einträgen wie oben erwähnt

Map<String, String> partialArticlesInfo = new HashMap<String,String>(); 
Map<String, String> partialArticlesTempMap = null; 
for (Map.Entry<String,String> entry : partialStockArticlesQtyMap.entrySet()) 
{ 
    partialArticlesTempMap = new HashMap<String,String>(); 
    partialArticlesTempMap.put("itemNo",entry.getKey()); 
    partialArticlesTempMap.put("availQty",entry.getValue()); 
    partialArticlesInfo.putAll(partialArticlesTempMap); 
} 

Antwort

0

In Java (ich nehme an, Sie Java verwenden, in die Zukunft wäre es hilfreich, zu spezifizieren, dass) und jede andere Sprache, die ich kenne, enthält eine Karte Zuordnungen zwischen Schlüsseln und Werten. Nur eine Zuordnung ist pro Schlüssel erlaubt. In Ihrem "map2" sind die Schlüssel "itemNo" und "availQty". Was passiert ist also, dass Ihre for-Schleife die Werte für den ersten Eintrag festlegt und sie dann mit den Daten des zweiten Eintrags überschreibt, weshalb dies der einzige Eintrag ist, den Sie sehen. Schauen Sie sich Java - Map und Map - Java 8 für weitere Informationen.

Ich verstehe nicht, warum Sie die Daten in eine Karte zu setzen versuchen, können Sie es einfach so etwas gerade in JSON setzen:

JSONArray partialArticlesInfo = new JSONArray(); 

for (Map.Entry<String,String> entry : partialStockArticlesQtyMap.entrySet()) { 
    JSONObject stockEntry = new JSONObject(); 
    stockEntry.put("itemNo", entry.getKey()); 
    stockEntry.put("availQty", entry.getValue()); 

    partialArticlesInfo.put(stockEntry); 
} 

JSONObject root = new JSONObject(); 
root.put("partialArticlesInfo",partialArticlesInfo); 

Dieses „map1“ stattfinden wird (partialStockArticlesQtyMap in Ihr Code) und erstellen Sie ein JSON-Objekt genau wie in Ihrem Beispiel - Sie müssen map2 nicht als Zwischenschritt verwenden. Es führt eine Schleife über jeden Eintrag in map1 durch, erstellt ein JSON-Objekt, das es darstellt, und fügt es einem JSON-Array hinzu, das schließlich einem Root-JSON-Objekt als "partialArticlesInfo" hinzugefügt wird.

Der genaue Code kann je nach der von Ihnen verwendeten JSON-Bibliothek leicht abweichen - sehen Sie in der Dokumentation nach.

0

Ich stimme Brendan zu. Eine andere Lösung wäre, die Objekte Set oder List wie folgt zu speichern.

class Item { 
    Long itemNo; 
    int quantity; 

     public int hashCode() { 
     Long.hashCode(itemNo) + Integer.hashCode(quantity); 
     } 

     public int equals(Object other) { 
     other instanceOf Item && other.itemNo == this.itemNo && other.quantity = this.quantity; 
     } 
    } 
} 

dann können Sie die JsonArray Methode von ihm beschriebenen verwenden, um den JSON-String in Ausgabe zu erhalten

Dies bedeutet, dass das Hinzufügen neue Variablen für das Objekt wird nicht mehr Aufwand erfordert die Json

zu erzeugen
Verwandte Themen