2016-09-12 3 views
1

Ich arbeite gerade an der Erstellung eines Modells basierend auf der bereitgestellten JSON-Eingabe und umgekehrt.JSON-Objektwerte abrufen

Die Ausgabe ist, wenn ich versuche, die Objekte wie predefinedStream, name und kind abzurufen, zeigt es nicht definiert, obwohl die ersten zwei id und classes richtig in der Warnung angezeigt wird.

Gespeichert Json Output

saved Json

Warnmeldung generiert

alert

Belastungselement, wenn Json vorgesehen

die folgende

ui

Alert für das oben genannte Ziel

Wenn ich den zuvor generierten Code in den Textbereich und klicken Sie auf Last kopieren, bekomme ich

alert

Speichern von Daten in Json Objekte

function saveFlowchart() { 
    var node = []; 
    var matches = []; 
    var totalElementCount = 0; 
    var searchEles = document.getElementById("container").children; 
    for (var i = 0; i < searchEles.length; i++) { 
     matches.push(searchEles[i]); 
     var idOfEl = searchEles[i].id; 
     totalElementCount = idOfEl; 

     if (searchEles[i].id != null || searchEles[i].id != "") { 
      var $element = $("#" + searchEles[i].id); 
      var dropElem = $("#" + searchEles[i].id).attr('class'); 

      var position = $element.position(); 

      var elId = parseInt(idOfEl); 

      if (dropElem == "streamdrop ui-draggable") { 
       node.push({ 
        id: idOfEl, 
        class: dropElem, 
        position: { 
         top: position.top, 
         left: position.left, 
         bottom: position.bottom, 
         right: position.right 
        } 
       }); 

       for (var count = 0; count < 100; count++) { 
        if (createdImportStreamArray[count][0] == idOfEl) { 
         node.push({ 
          predefinedStream: createdImportStreamArray[count][1], 
          name: createdImportStreamArray[count][2], 
          kind: "import" 
         }); 
        } 
       } 
      } 
     } 
    } 
} 

abrufen Json Objektwerte Elemente

function loadFlowchart(e) { 
    var flowChartJson = $('#jsonOutput').val(); 
    var flowChart = JSON.parse(flowChartJson); 

    var node = flowChart.node; 
    $.each(node, function (index, elem) { 

     droppedElement = document.getElementById(id); 

     var id = elem.id; 
     var classes = elem.class; 
     // var positionTop = elem.position.top; 
     var asName = elem.name; 
     var kind = elem.kind; 

     if (classes == "streamdrop ui-draggable") { 
      var selectedStream = elem.predefinedStream; 
      alert("elem id: " + id + "\nclass:" + classes + "\nasName:" + asName + "\nkind:" + kind + "\nselected:" + selectedStream); 
      if (kind == "import") { 
       createdImportStreamArray[id - 1][0] = id; 
       createdImportStreamArray[id - 1][1] = selectedStream; 
       createdImportStreamArray[id - 1][2] = asName; 
       createdImportStreamArray[id - 1][3] = "Import"; 
      } 
      alert("Id of element parsed: " + id + "\nclass: " + classes /*+ "\npositionTop: " + positionTop*/); 
      var newAgent = $('<div>').attr('id', id).addClass('streamdrop'); 
      var prop = $('<a onclick="doclick(this)"><b><img src="../Images/settings.png" class="settingsIconLoc"></b></a> ').attr('id', (id + '-prop')); 
      var showIcon = $('<img src="../Images/Import.png" class="streamIconloc"></b></a> ').attr('id', (id)); 
      var conIcon = $('<img src="../Images/connection.png" onclick="connectionShowHideToggle(this)" class="showIconDefined"></b></a> ').attr('id', (id + 'vis')); 
      newAgent.text(asName).append('<a class="boxclose" id="boxclose"><b><img src="../Images/Cancel.png"></b></a> ').append(showIcon).append(conIcon).append(prop); 
      dropCompleteElement(newAgent, id, e, kind); 
     } 
    }); 
} 

Wenn der zuvor gespeicherte Json geführt wird, korrekt abgerufen put erstellen ich die Daten immer ähnlich die ersten Alarm-Box Würde eine Eingabe in dieser Hinsicht zu schätzen wissen werden.

+0

Kann den 'undefinierten' Begriff nirgendwo in deinen' json' Blöcken finden !? –

+0

Ihr FlowChartJson Json sieht ein bisschen verdächtig aus. Überprüfen Sie hier, wie zu Json, wie das Format davon - https://www.copterlabs.com/json-what-it-is-how-it-works-how-to-use-it/ – Tasos

Antwort

0

Es ist mir gelungen, dies zu lösen, indem ich den gesamten Code kompiliere, der dem json-Objekt in einem einzigen Knoten Werte zuweist, wie unten gezeigt.

node.push({ 
      id: idOfEl, 
      class: dropElem, 
      position: 
      { 
       top: position.top, 
       left: position.left, 
       bottom: position.bottom, 
       right: position.right 
      }, 
      predefinedStream: createdImportStreamArray[count][1], 
      name: createdImportStreamArray[count][2], 
      kind: "import" 
}); 

Jetzt ist die Ausgabe wie erwartet.