2 JsonArray vergleichen, geht es auch einfacher ?

fireGlurak

Mitglied
Nabend :)

Gegeben sind 2 JsonArray mit einer Menge von Objekten und jedes dieser Objekte besitzt eine Nummer. Nun möchte Array1 mit Array2 hinsichtlich der Nummer vergleichen und bei einem Match möchte ich das Objekt aus Array2 entsprechend erweitern.
Zwar kann ich dies lösen, allerdings sagt mir mein Gefühl, dass dies auch noch einfacher geht. Da ich ähnliche "Probleme" in der Vergangenheit schon mal hatte, dachte ich, dass ich mal nachfrage wie man sowas besser lösen könnte :D

Vom Bauchgefühl würde ich sagen, dass dies mit Streams "einfach" zu lösen ist, nur leider bin ich damit noch nicht wirlklich vertraut und meine Gehversuche liefen dort leider ins leere. Möglicherweise lässt sich dies aber auch anders Lösen und da wäre ich für Vorschläge sehr dankbar :)

Ich habe jetzt mal versucht ein vereinfachtes Beispiel zu konstruieren um mein Ziel verständlicher zu machen. Zugegeben, mein "vereinfachtes" Beispiel scheint mir noch ein wenig zu abstrakt, aber ich hoffe es genügt :)

Nachstehender Code besteht im Grunde aus folgenden Schritten
->Iteriere über jArrA
->Ermittle zu jedem Obj. aus jArrA den Index aus jArrB in dem du über jArrB iterierst
(theoretisch kann bei einem Match die Schleife auch beendet werden, das bildet der Code nicht ab, aber darum geht es erstmal nicht)
-> Bearbeite das gefundene Objekt in jArrErgebnis

Im Grunde bräuchte ich auch kein Ergebis Array, sondern besser wäre es wenn ich jArrB direkt überarbeite, aber ich habe das in meinem Beispiel einfach mal mit einem Ergebnis Array gelöst.

Nach Ausführung erhalte ich das korrekte Ergebnis

[{"Nummer":6},{"Nummer":5,"einKey":"123"},{"Nummer":2,"einKey":"123"}]


public class Test { public static void main(String[] args) { JSONArray jArrA = new JSONArray(); JSONArray jArrB = new JSONArray(); JSONObject jObjA = new JSONObject(); JSONObject jObjB = new JSONObject(); JSONObject jObjC = new JSONObject(); JSONObject jObjD = new JSONObject(); JSONObject jObjE = new JSONObject(); //Erste Array aufbereiten jObjA.put("Nummer", 5); jObjA.put("val", "blaa"); jObjA.put("isOffen", true); jObjB.put("Nummer", 2); jObjB.put("val", "blaablaa"); jObjB.put("isOffen", false); jArrA.put(jObjA); jArrA.put(jObjB); //Zweite Array aufbereiten jObjC.put("Nummer", 6); jObjD.put("Nummer", 5); jObjE.put("Nummer", 2); jArrB.put(jObjC); jArrB.put(jObjD); jArrB.put(jObjE); //Ergbnis Array berechnen ermittleNeuesArray(jArrA,jArrB); } public static void ermittleNeuesArray(JSONArray jArrA, JSONArray jArrB) { int nummer,index; JSONArray jArrErgebnis = jArrB; for (int i = 0; i < jArrA.size(); i++) { nummer = jArrA.getJSONObject(i).getInt("Nummer"); index = ermittleIndexJArrB(nummer, jArrB); jArrErgebnis.getJSONObject(index).put("einKey", "123"); } System.out.println(jArrErgebnis.toString()); } public static int ermittleIndexJArrB(int nummer, JSONArray jArrB) { int index = 0; for (int i = 0; i < jArrB.size(); i++) { if (nummer == jArrB.getJSONObject(i).getInt("Nummer")) { index = i; } } return index; } }

Hier ein kleines Bildchen zur Verdeutlichung der Struktur
JsonArray.png

Viele Grüße

Markus
 

mihe7

Top Contributor
Welche Lib verwendest Du?

Ganz allgemein gesprochen, würde ich sagen: arrA in ein Set mit Nummern umwandeln. Danach über arrB iterieren und prüfen, ob Nummer im Set enthalten ist.
 

fireGlurak

Mitglied
Oh wir verwenden bei dem JsonArrays unsere eigene firmeninterne Lib, ich hatte gedacht, dass das aus der Java Standardbib kommt oder so....

Aber okay das Beispiel lässt sich ja im Grunde auch auf "normale" Arrays abbilden

ich würde mir das mit Set ggf. mal ansehen, danke schon mal.
 

Robert Zenz

Top Contributor
Wuerde ich auch so machen vom Ablauf her:

1. Array A durchlaufen.
2. Pruefen ob Objekt Ax in Array B vorkommt.
3. Wenn ja, Eigenschaften von Ax auf Bx uebertragen.

Wenn du das Array nicht als "Map" betreten kannst nach Nummern, wird es nicht viel besser.

Ein paar Anmerkungen habe ich aber zu deinem Code-Stil, auszerdem retourniert deine Suchenfunktion wenn sie nichts findet den Index "0", was ziemlich schlecht ist. Deine ermittleIndex Methode laesst sich einfacher schreiben (wenn du das erste Vorkommen willst, wovon ich ausgehen wuerde):

Java:
public static int findeIndexVon(int objektNummer, JSONArray jsonArray) {
    for (int index = 0; index < jsonArray.size(); index++) {
        JSONObject objekt = jsonArray.getJSONObject(index);
     
        if (objekt.getInt("Nummer") == objektNummer) {
            return index;
        }
   }
 
   return -1;
}

Desweiteren solltest du die Variablen dort deklarieren wo sie vorkommen, alle am Anfang zu definieren ist in Java komplett unnoetig.

Java:
public static void ermittleNeuesArray(JSONArray quellJsonArray, JSONArray zielJsonArray) {
    for (int index = 0; index < quellJsonArray.size(); index++) {
        JSONObject objekt = quellJsonArray.getJSONObject(i);
        int objektNummer = objekt.getInt("Nummer");
        int objektIndexInZiel = findeIndexVon(objektNummer, zielJsonArray);
      
        if (objektIndexInZiel >= 0) {
            JSONObject zielObjekt = zielJsonArray.getJSONObject(objektIndexInZiel);
         
            zielObjekt.put("einKey", "123");
        }
}

Wie gesagt, sieht fuer mich eigentlich gut aus.

Ob jetzt umwandeln in "Set" oder "Map" Sinn macht, kann man nur sagen wenn man den genauen Anwendungsfall kennt. Wenn das Objekt weniger als, mh, sagen wir mal als Hausnummer 1000 Eintraege hat, wuerde ich nicht ueber eine Umwandlung nachdenken weil du wahrscheinlich mehr Zeit mit wandeln als durchlaufen verbingen wirst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JSONArray bauen Allgemeine Java-Themen 4
Thallius JSONArray - the method length() is undefined for JSONArray Allgemeine Java-Themen 4
Ü Arrays vergleichen Allgemeine Java-Themen 59
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
D Zwei Listen vergleichen Allgemeine Java-Themen 7
N String vergleichen. Allgemeine Java-Themen 27
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
CptK Input/Output Buttonwerte vergleichen Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
C Input/Output Textdateien vergleichen Allgemeine Java-Themen 3
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
KeVoZ_ JSoup - Website Inhalt/Element mit String vergleichen Allgemeine Java-Themen 2
K Eingabe mit Char vergleichen klappt nicht! Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
W Variablen Dates vergleichen Allgemeine Java-Themen 7
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
J Farben mit comparing vergleichen Allgemeine Java-Themen 3
Dechasa Java 8 - Datum vergleichen Allgemeine Java-Themen 5
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
H Strings vergleichen Allgemeine Java-Themen 9
Y inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen Allgemeine Java-Themen 12
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
A Kann String nicht vergleichen (Android) Allgemeine Java-Themen 4
F Zwei LinkedHashMaps iterieren und vergleichen Allgemeine Java-Themen 2
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
7 6 int variablen vergleichen Allgemeine Java-Themen 34
E Lesen von mehrere Csv-Datei und ihre Inhalte vergleichen Allgemeine Java-Themen 3
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
OnDemand Spalten vergleichen Java Allgemeine Java-Themen 25
C Rechenzeit verschiedener Algorithmen vergleichen Allgemeine Java-Themen 4
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
S String vergleichen Allgemeine Java-Themen 1
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
N Variablen Positionen vergleichen ??? Allgemeine Java-Themen 2
A Bilder vergleichen auf gleichheit oder ähnlichkeit Allgemeine Java-Themen 8
J XML Dateien vergleichen Allgemeine Java-Themen 9
X Collections Hashmaps vergleichen Allgemeine Java-Themen 23
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
A PDF Content vergleichen Allgemeine Java-Themen 3
M Datentypen Referenzen oder seperate IDs vergleichen? Allgemeine Java-Themen 6
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
S Reports vergleichen Allgemeine Java-Themen 8
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
T Wörter Vergleichen Allgemeine Java-Themen 3
T Uhrzeiten vergleichen Allgemeine Java-Themen 4
P JAVA Bilder/Videos in Form von Files vergleichen Allgemeine Java-Themen 7
S Strings vergleichen Allgemeine Java-Themen 11
9 Dateinamen erfassen und vergleichen Allgemeine Java-Themen 6
S String Zeichen für Zeichen vergleichen Allgemeine Java-Themen 4
D String mit Wörterbuch vergleichen Allgemeine Java-Themen 12
I Input/Output Zeichenkette eingeben und vergleichen Allgemeine Java-Themen 2
Landei Hilfsklasse zum Vergleichen Allgemeine Java-Themen 5
S Datum vergleichen - ohne Hilfsmittel Allgemeine Java-Themen 8
1 zwei Strings vergleichen Allgemeine Java-Themen 16
F Vergleichen von Datumswerten Allgemeine Java-Themen 3
S Ergebnis von Cursor c1 mit Cursor c2 vergleichen Allgemeine Java-Themen 3
G Zwei bytes vergleichen Allgemeine Java-Themen 2
S Fixe Zahlen vergleichen Allgemeine Java-Themen 4
M Zeitangaben vergleichen Allgemeine Java-Themen 2
MonsterBit 2 Werte aus 2 Array vergleichen Allgemeine Java-Themen 10
1 String mit contains vergleichen (ignore case) Allgemeine Java-Themen 2
Developer_X Problem mit String vergleichen Allgemeine Java-Themen 3
Z zwei Daten vergleichen Allgemeine Java-Themen 4
nrg Leere Objektreferenz mit != null vergleichen Allgemeine Java-Themen 4
ARadauer PDF Vergleichen Allgemeine Java-Themen 16
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
O Probleme beim vergleichen von 2 Datumsangaben Allgemeine Java-Themen 2
N 2 files auf gleichheit vergleichen Allgemeine Java-Themen 5
V Datum vergleichen Allgemeine Java-Themen 7
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
M Warum Strings mit equals vergleichen... Allgemeine Java-Themen 6
G Datum vergleichen Allgemeine Java-Themen 5
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
J Inhalt von HashMap vergleichen Allgemeine Java-Themen 3
S Anfänger: 2 Objekte vergleichen? Allgemeine Java-Themen 8
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
K zipdatei mit txtdatei vergleichen Allgemeine Java-Themen 9
S 2 URIs vergleichen Allgemeine Java-Themen 4
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
QDog beliebige Objekte vergleichen Allgemeine Java-Themen 2
G schnell Strings vergleichen Allgemeine Java-Themen 4
V Zwei ArrayList(s) vergleichen Allgemeine Java-Themen 6
D Vergleichen von Datensätzen Allgemeine Java-Themen 2
M Name von Wochentagen vergleichen Allgemeine Java-Themen 3
J Dateien binär vergleichen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben