JSON String auslesen

serializable

Mitglied
Hallo,

ich versuche gerade einen JSON String auszulesen.

Zunächst einmal die Frage, wie ich am Besten auf das Object zugreifen kann, nachdem ich eval angewendet habe.

PHP:
function responseData(){

   var response;

   if (http.readyState == 4) {
        if (http.readyState == 200){
          
           response = http.responseText;
            var daten = eval("(" + response + ")");
       
         for (var i = 0; i < daten.length; i++) {
         var link = daten[i];
        ....

daten[i] funktioniert nicht so richtig :(

Dann würde ich gern auch die Funktion von der JSON Bibliothek einsetzen.

Wenn ich jetzt die Bibliothek extern einbinde, wie kann ich dann in meiner Datei
die Funktionen aufrufen. Gibt es in js eine Funktion require() oder kann ich mittes new
eine Instanz erzeugen

Vielen Dank im Voraus.

Gruß
 
Habe das Einbinden einer externen JS Datei mal mit

document.write('<script type="text/javascript" src="json2.js"></script>'); probiert,
das haut aber nicht hin, da die aufgerufenen Funktionen nicht erkannt werden.

Gibt es da andere Möglichkeiten ?
 
Also generell bindest du externe Dateien mit

Code:
<script type="text/javascript" src="json2.js"></script>

ein. document.write bringt dir nix, da du das zwar in das Dokument schreibst, es aber nicht ausgeführt wird. Wenn du mit der o.G. Methode die js Datei eingebunden hast, dann kannst du direkt auf die Methoden / Klassen der Datei zugreifen.

Ich kann es jetzt nicht ganz garantieren, dass es richtig ist, was ich jetzt schreibe (hab JSON nur in Frameworks als BlackBox verwendet), aber so wie ich das JSON System verstanden habe, braucht man die Rückgabe der Werte nicht zu parsen. Der JSON Rückgabewert löst eine onSuccess Funktion aus, über die dann der Wert bestimmter Variablen verändert wird.
 
Ich bin in der Sache auch noch nicht so firm, aber JSON hat doch grundsätzlich eine Baumstruktur und kann mitunter mit einem Array bestückt sein.

Deswegen greift man objektweise auf Daten zu.

Beispiel JSON_List.js-Datei:
Code:
var Playerlist = "{BF2:[";
Playerlist=Playerlist+"{Name:\"Alfred\",BF2ID:\"123456\",HAMID:\"5.13.67.89\",XFIID:\"alfi\"},";
Playerlist=Playerlist+"{Name:\"Ernst\",BF2ID:\"234567\",HAMID:\"5.52.11.86\",XFIID:\"ernstclown\"},";
Playerlist=Playerlist+"{Name:\"Neumann\",BF2ID:\"345678\",HAMID:\"5.4.29.87\",XFIID:\"AENeumann\"},";
Playerlist=Playerlist+"]}";

Einbindung und Abfrage im <Head>:
Code:
<script type="text/javascript" src="./JSON_List.js"></script>

<script type="text/javascript"><!--

var Liste = eval(Playerlist);
var Anzahl = Liste.length;

for (var i = 0; i < Anzahl; ++ i){
 document.writeln(Liste[i].Name+" - "+Liste[i].BF2ID);
}
//--></script>

mfg chmee
 
Danke für die Antworten. Gerne würde ich erst einmal das Problem mit dem einbinden lösen.
Ich habe es auch schon ohne das document.write ausprobiert, also einfach

<script type="text/javascript" src="json2.js"></script>

diese Code ohen in die js Datei geschrieben. Die Datei erzeut keine Ausgabe, sondern
wird von einer html seite eingebunden.

Leider bekomme ich die Meldung, dass die Funktionen nicht bekannt sind, wenn ich diese
aufrufe.

Oder muss ich trotz dessen, dass ich keine Ausgabe habe, einen HTML Header erzeugen,
um eine JS datei einzubinden


Vielen Dank
 
Oder muss ich trotz dessen, dass ich keine Ausgabe habe, einen HTML Header erzeugen,
um eine JS datei einzubinden

Also... du hast eine HTML Datei, in die du die js Datei einbindest. Ein HTML Konstrukt ist zwar nicht zwingend notwendig, gehört aber zum guten Stil.

Um dir etwas näheres zu dem Rest zu sagen, benötigen wir etwas mehr Infos von dir, was du denn genau vorhast. Anders wird es sehr schwer sein zu verstehen, was du machst und was unterm Strich herauskommen sollte. Denn es gibt viele Gründe wieso etwas nicht funktioniert. Und meine Kristallkugel ist streikt gerade.
 
OK. sorry. Folgendes Testszenario.

Ich sende irgendetwas an den Server: Mein HTML

PHP:
<html>
<head>
<title>Primzahltest</title>
<script type="text/javascript" src="ajax1.js"></script>
</head>
<body>
<form method="post">
<input type="text" name="zahl" id="kredit" onblur ="sendData('kredit')" />
<input type="submit" value="irgendetwas" " />
</form>
<span id="response"> </span>
</body>
</html>

Hier binde ich eine Datei ajax1.js ein.


In der Datei ajax1.js will ich nun die Bibliothek json2.js einbinden. Diese ist von json.org.
Einfach mal zum Testen.

Jetzt habe ich die Datei versucht mit

PHP:
document.write('<script type="text/javascript" src="json2.js"></script>');

einzubinden ebenso wie ohne <script type="text/javascript" src="json2.js"></script>
Haut auch nicht hin.

Was ich machen möchte ist:


PHP:
function responseData(){

   var response;

   if (http.readyState == 4) {
        if (http.readyState == 200){
           
           response = http.responseText.toJSONString(); 
           response = response.parseJSON();
....

Einfach einen JSON String, denich vom Server erhalte, so parsen, dass ich Ihn verarbeiten kann.


Leider kann ich nun in der ajax1.js nicht die json2.js einbinden.....:confused:
 
Und wo bekommst du jetzt die Meldung, dass die Funktion nicht bekannt ist? Bzw. welche Funktion sendData?
 
genau so ist es:

http.responseText.toJSONString is not a function
[Break on this error] response = http.responseText.toJSONString();
 
So irgendwie hab ich nun. Das Problem war die Bibliothek . Bei json.org gibt es 2 Bibliotheken. json.js mit den o.g. Funktionen und json2.js. Mit der letzteren hat es dann geklappt.

Hier mal ein Beispiel zum Auslesen von verschachtelten Objekten.

Diese Funktion liest sowohl Arrays und Objekte ( {} gem. JSON ) , als normale Variablen
aus:

PHP:
function responseData(){

   var response;

   if (http.readyState == 4) {
  
           response = http.responseText; 
 
           var myObject = JSON.parse(response);
           
          for (var key in myObject) {
           
           if (myObject[key]  instanceof Object){
              
              for (var y in myObject[key]) {
               alert(myObject[key][y]);
              }
           }
           else
             alert(myObject[key]);
         }

Vielen Dank noch einmal.
 

Neue Beiträge

Zurück