[java] CouchDB und JSON synchronisation

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [java] CouchDB und JSON synchronisation

    Hallo,

    ich habe schon alles versucht und viel ausprobiert komme aber auf keinen
    grünen Zweig ... jetzt hoffe ich das mir hier jemand evtl. mit einer oder auch
    mehreren Ideen und / oder Tipps helfen kann.

    Ich habe mir eine CouchDB installiert und diese auch schon im Einsatz.

    Ich kann Documents im JSON Format in der DB ablegen und auch auslesen...
    soweit so gut.

    Jetzt mein Problem: Ich möchte in der DB immer in der neuesten Revision die
    kompletten Daten halten d.h. ich muss wenn ich Daten ablegen bzw. hinzu-
    fügen möchte:
    1.) JSON Document aus der Datenbank laden (die aktuelle rev.)
    2.) Ein neues JSON File mit ergänzenden bzw. zu ändernden Daten laden
    -------- jetzt beginnt das Problem ------
    3.) Ich laufe rekursiv die JSON Struktur des Originals durch und vergleiche
    die Werte mit dem neuen JSON und möchte die Daten natürlich ergänzen.

    Und ... das bekomme ich nicht hin, ich benutze jcouchdb API mit svenson mein
    Problem sind die verzweigungen von (Bei Java) Map / ArrayList und Strings bzw.
    sind nur die Arrays ein Problem da ich dort keinen Key habe der die Werte ein-
    deutig identifiziert.

    Ich hoffe ihr könnt mein Problem wenigstens etwas nachvollziehen.

    Hat wer eine Idee wie ich zwei JSON Dateien vernünftig mergen kann um diese
    dann als ein neues Doc komplett in meiner CouchDb abzuspeichern?

    Vielen Dank euch

  • #2
    Hallo,

    *move* ins richtige Unterforum und markiert als java. (Wenn das nicht stimmt, bitte melden. Das nächste Mal bitte dazuschreiben, worum es geht.)

    JSON-Arrays werden doch als java.util.List geparst, also kannst du doch z. B. einfach über
    Code:
    list.get(3);
    das vierte Element davon ansprechen.

    Evtl. hilft dir auch der svenson TypeMapper weiter, um ein bestimmtes Objekt im Array zu finden.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Danke für die Antwort und den Link,
      das hatte ich auch schon angeschaut ist aber nicht das richtige
      für mein Problem.

      Ich möchte eigentlich einfach zwei JSON Strings / Files / Objekte egal
      in welcher Form zu einem Ergebniss d.h. einem JSON irgendwas zusammen-
      fügen, dabei ist es mir relativ egal wie das vonstatten gehen kann ich habe es mit
      Java versucht mit Rekursion aber bekomme das nicht hin.
      Solange nur Maps und Strings da sind (im JSON) geht das aber die Arrays bzw.
      Listen dadrin bekomme ich nicht vernünftig abgeglichen.

      Evtl hab ich auch nur einen gedanklichen Hänger und brauche nur einen Anstoss in die richtige Richtung

      Das hier ist mein Ansatz gewesen aber ich steh auf dem Schlauch ;(
      Code:
          public void compare(String key, Object object){
              if(object instanceof Map<?,?>){
                  Map<String, Object> newObject = (Map<String, Object>) object;
                  Depth tiefe = new Depth(key, 'M');
                  depth.add(tiefe);
                  this.compareMap(newObject);
              }
              else if(object instanceof ArrayList<?>){
                  ArrayList<Object> newObject = (ArrayList<Object>) object;
                  Depth tiefe = new Depth(key, 'A');
                  depth.add(tiefe);
                  this.compareArrayList(newObject);
              }
              else if(object instanceof String){
                  String newObject = (String) object;
                  this.compareString(newObject);
              }
          }
          
          public void compareMap(Map<String, Object> map){
              for (Map.Entry<String, Object> entry : map.entrySet()){
                  compare(entry.getKey(), entry.getValue());
              }
          }
          
          public void compareArrayList(ArrayList<Object> array){
              Iterator<Object> listIterator = array.iterator();
              while(listIterator.hasNext()){
                  compare("ARRAY", listIterator.next());
              }
          }    
          
          public void compareString(String string){
              Object container = resultMap;
              Iterator<Depth> depthIterator = depth.iterator();
              while(depthIterator.hasNext()){
                  Depth actuallDepth = depthIterator.next();
          
                  if(container instanceof Map<?,?>){
                      Map<String,Object> realContainer = (Map<String,Object>)container;                
                      if(!(realContainer.containsKey(actuallDepth.getKey()) && actuallDepth.getKey() == "ARRAY")){
                          if(actuallDepth.getType() == 'M'){
                              Map<String, Object> newMap = new HashMap<String, Object>();                        
                              realContainer.put(actuallDepth.getKey(), newMap);
                              container = newMap;
                          }
                          else if(actuallDepth.getType() == 'A'){
                              ArrayList<Object> newArray = new ArrayList<Object>();                        
                              realContainer.put(actuallDepth.getKey(), newArray);
                              container = newArray;
                          }
                      }                
                  }
                  else if(container instanceof ArrayList<?>){
                      ArrayList<Object> realContainer = (ArrayList<Object>)container;
                      if(realContainer.){
                          
                      }
                      
                  }
                  
              } // end of while
          } // end of method compareString
      Zuletzt geändert von PHP_Pan; 28.07.2010, 15:10.

      Kommentar


      • #4
        Ich kann den Code irgendwie nicht nachvollziehen. Normalerweise erwartet man ja von einer Vergleichsmethode irgendeinen Rückgabewert.

        Warum arbeitest du mit dem Pseudoschlüssel „ARRAY“ statt irgendetwas à la i++ zu verwenden? Dass du dann deine Arrayelemente nicht mehr wiederfinden kannst, ist kein Wunder
        Zuletzt geändert von AmicaNoctis; 28.07.2010, 15:26.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar

        Lädt...
        X