getJSON() wenn Parameter aus verschiedenen Zahlen bestehen - Wie?

pyretta

Mitglied
Hallo,

ich habe serialisierte Werte in einer DB die ich wiederum mittels PHP de-serialisiert, in ein Array gepackt und anschließend als JSON ausgegeben habe.

Beispiel eines solchen serialisierten Werts:
a:6:{i:0;s:1:"2";i:1;s:1:"3";i:2;s:1:"8";i:3;s:2:"10";i:4;s:2:"14";i:5;s:2:"35";}

Nach folgendem Schema bin ich in PHP vorgegangen:
PHP:
$afid_array = array();
$mysql_select = mysql_query("SELECT id,pid,tstamp,serials,createdate FROM `tl_article`;") or die("Anfrage fuer 'tl_article' war nicht erfolgreich. Error: ".mysql_error());
while($object = mysql_fetch_object($mysql_select)) {
      $afid_array[] = unserialize($object->serials); //hier de- oder unserialisiere ich die Werte
}

$multiarray = array("serial_ids" => $afid_array, "array2" => array2);
$json_inhalt = '{"unserialized":'.json_encode($multiarray, JSON_FORCE_OBJECT).'}';

Später in der JSON-Datei sieht das dann wie folgt aus:
Code:
{
    "unserialized": {
        "serial_ids": {
            "0": {
                "0": "2",
                "1": "3",
                "2": "8",
                "3": "10",
                "4": "14",
                "5": "35"
            },
            "1": {
                "0": "2",
                "1": "3",
                "2": "5",
                "3": "7",
                "4": "29",
                "5": "14",
                "6": "17",
                "7": "21"
            },
            "2": {
                "0": "2",
                "1": "3",
                "2": "9",
                "3": "15",
                "4": "18",
                "5": "21"
            },
            "3": {
                "0": "1",
                "1": "2",
                "2": "3",
                "3": "8",
                "4": "25",
                "5": "33",
                "6": "9",
                "7": "10",
                "8": "14",
                "9": "15",
                "10": "16",
                "11": "17",
                "12": "31",
                "13": "20"
            },
            "4": {
                "0": "1",
                "1": "2",
                "2": "3",
                "3": "11",
                "4": "12",
                "5": "36",
                "6": "14",
                "7": "20"
            }
        }
    }
}

Wie kann ich jetzt auf die einzelnen Zahlenwerte (IDs) zugreifen, um sie im Code weiterverwenden zu können?

Folgendes geht leider nicht:
Code:
$.getJSON('json-datei.json', function(data) {
       $.each(data.unserialized.serial_ids, function(index,item) {		
                for (var i=0, len=item.length; i < len; i++) {
                var id = item.i;	
                alert(id);
                }		
	});
});

Vielen Dank im Voraus für Eure Hilfe. :)
 
Ich verstehe nicht ganz, warum du die Option JSON_FORCE_OBJECT nutzt, weil das in deinem Fall Unsinn ist, aber gut. Ansonsten kannst du auf Objekte in JavaScript auch noch so zugreifen:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $.each(data.unserialized.serial_ids, function(index,item) {      
    for (var i=0, len=item.length; i < len; i++) {
      var id = item[i];    
      alert(id);
    }       
  });
});
Ich garantiere dir aber nicht, dass das funktioniert, da du durch die oben schon erwähnte Option die Schlüssel als Zeichenketten übermittelst, jedoch in deiner Schleife mit Zahlenwerten hantierst.
 
Vielen Dank für deine Antwort "einfach nur crack". :)

Das "JSON_FORCE_OBJECT" hab ich drin, da aus irgend einem Grund die JSON-Datei laut jsonlint.com ansonsten fehlerhaft sein soll. Kenne mich da leider noch nicht genug aus, um das zu verstehen. Es sind auch andere Arrays in dem "$multi-array" integriert, welche unter anderem auch HTML-Code enthalten. Vielleicht deshalb? Keine Ahnung...

Dein Code hat aber leider auch nicht funktioniert. Also es wird genau wie mit meinem Code nichts angezeigt, bzw. eben kein "alert". Also der Code wird wahrscheinlich einfach übergangen.
 
Dann machen wir daraus mal eine abgerundete jQuery-Sache:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids.each(function () {
    $(this).each(function () {
      var id = this;
      alert(this);
    });       
  });
});

Und deinen PHP-Code kannst du mal so abändern:
PHP:
$sql = '
SELECT
  `id`,
  `pid`,
  `tstamp`,
  `serials`,
  `createdate`
FROM
  `tl_article`';
$mysql_select = mysql_query($sql) or die('Anfrage fuer <tl_article> war nicht erfolgreich. Error: ' . mysql_error());

$afid_array = array();
while ($object = mysql_fetch_object($mysql_select)) { 
      $afid_array[] = unserialize($object->serials); //hier de- oder unserialisiere ich die Werte 
}

$json_inhalt = array(
  'unserialized' => array(
    'serial_ids' => $afid_array,
    'array2' => $array2
  )
);
$json_inhalt = json_encode($json_inhalt);
 
Hallo "einfach nur crack" :)

Vielen Dank für Deine Hilfe und die Mühe die Du Dir machst.
Irgendwie mach ich aber was falsch beim Einbinden des Codes. Dreamweaver meldet mir ständig es wäre ein Syntax-Fehler in Deinem Code in der Zeile 6. Aber es sind doch alle Klammern geschlossen? Ich bin leider noch zu unerfahren um das zu durchschauen. Ich fange gerade erst an mit jQuery und PHP.
 
Hupps, da ist auch ein Syntaxfehler, jedoch auf Zeile 2. Richtig müsste es so aussehen:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function () {
    $(this).each(function () {
      var id = this;
      alert(this);
    });       
  });
});
 
Oh, das hätte ich nun auch sehen können :D sorry.

Also das Alert wird schon mal aufgerufen, der Inhalt stimmt aber noch nicht wirklich. Da steht nur "object Object".

Vielleicht kann man da einfach nicht drauf zugreifen, weil das nur Zahlen sind und er diese dort nicht vermutet oder so? Wäre schade, aber doch vielleicht möglich?
 
Okay, dann würde folgendes vielleicht gehen:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function (key, value) {
    $(value).each(function (key, value) {
      var id = value;
      alert(value);
    });       
  });
});
 
WOW! Vielen Dank! So funktionierts :D

Die JSON sieht jetzt übrigens so aus:
Code:
{
    "unserialized": {
        "serial_ids": [
            [
                "2",
                "3",
                "8",
                "10",
                "14",
                "35"
            ],
            [
                "2",
                "3",
                "5",
                "7",
                "29",
                "14",
                "17",
                "21"
            ],
            [
                "2",
                "3",
                "9",
                "15",
                "18",
                "21"
            ],
            [
                "1",
                "2",
                "3",
                "8",
                "25",
                "33",
                "9",
                "10",
                "14",
                "15",
                "16",
                "17",
                "31",
                "20"
            ]
        ]
    }
}

Damit geht's super!

Dein Code:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function (key, value) {
    $(value).each(function (key, value) {      
      alert(value);
    });       
  });
});

Zeigt dann jede ID einzeln im Alert-Fenster. Der Key bezieht sich dabei auf jeden einzelnen Wert, fängt also immer wieder bei 0 an.

Gehe ich eine Ebene drüber, also so:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function (key, value) {
     alert(value);    
  });
});

Zeigt das Alert-Fenster alle Werte eines Datensatzes an. Der Key geht von 0-56;
key: 0, value: 2,3,8,10,14,35

Wie kann ich nun die serial-IDs bestimmten Listeneinträgen als Klassen zuordnen?
Also z.B. das erste Listenelement (key=0) soll die values der serial_ids mit dem key=0 als Klassen erhalten.

Ich habe jetzt viele Varianten versucht, die alle erfolglos waren.

Mit den Dateinamen der eingebundenen Bildern ging das so:
Javascript:
var tn_array = Array();					
$('#liste img').each(function() {
	var scr = $(this).attr('src');
	var start_pos = scr.lastIndexOf('/')+1;
	var end_pos = scr.indexOf('.png',start_pos);
	var img_filename = scr.substring(start_pos,end_pos);						
	tn_array.push(img_filename);						
});    /* ende each "tn_array" */
					
$.each(tn_array, function(index,value) {
	for (var i=0, len=value.length; i < len; i++) {
	$('#liste li#aid_'+artid).addClass(value);
	}
});

Also versuchte ich das:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function (key, value) {
    $('#liste li.listitem').each(function() {
	$.each(value, function (key, value) {      
        $('#liste li#aid_'+artid).addClass('afcl_'+value);
        });						
   });       
  });
});

Aber das hat nicht so funktioniert wie es sollte...

Kannst du mir hierbei auch noch weiterhelfen? Das wäre super.
 
Zuletzt bearbeitet von einem Moderator:
Versuch es mal so:
Javascript:
$.getJSON('json-datei.json', function (data) {
  $(data.unserialized.serial_ids).each(function (key, value) {
    var id = value;
    $(value).each(function (key, value) {
      $('#liste li#aid_' + id).addClass('afcl_' + value);
    });
  });
});
 

Neue Beiträge

Zurück