2 Stimmen

Jquery mit JSON-Array - in Javascript-Array konvertieren

Ich habe die folgende XML-Ausgabe von einem asp.net-Webservice:

        1710
        1711
        1712
        1713

        Teleszkóp 350mm gázas
        Teleszkóp 150mm olaj
        Teleszkóp 260mm olaj sárga
        Teleszkóp 260mm elso

Ich verwende JQuery's $Ajax, um es vom Server zu erhalten, es funktioniert gut. Es wird in ein JSON-Objekt umgewandelt, aber wie kann ich es zurück in ein JavaScript-Array konvertieren?

Update: Das Problem ist, wenn es mit eval() analysiert wird, wird dieses Array-in-Array nur zu einem einzigen String!

5voto

Joel Coehoorn Punkte 377088

Das ist kein JSON-Objekt: es ist xml. JSON ist im Wesentlichen JavaScript und würde eher so aussehen:

[["1710", "1711", "1712","1713"], ["Teleskop 350mm Gas", "Teleskop 150mm Öl", "Teleskop 260mm Öl gelb", "Teleskop 260mm vorne"]]

0 Stimmen

Es ist wahr, es wird magischerweise von der Webservice in JSON umgewandelt; aber in JS sehe ich nur [Object object] :)

0 Stimmen

Das [Object object] sind Ihre Daten - Sie können darauf wie auf ein Array zugreifen.

2voto

cgp Punkte 40346

Ich nehme an, dass Ihre Daten automatisch von jQuery zurückkommen und in ein XML-Dokument geparst werden. Auf diese Weise lässt sich das XML-Objekt in ein Array umwandeln:

   mein geparsteDaten = [];  
   $('result', data).each(function() {
      geparsteDaten.push(  
         { name: $('name', this).text(),
           addr: $('addr', this).text(),
           city: $('city', this).text(),
           state: $('state', this).text(),
           zip: $('zip', this).text()
      });

2voto

stevehipwell Punkte 52558
var array = eval(json.d);

Wo array das Javascript-Array ist und json das JSON-Objekt und json.d der JSON-String ist.

0 Stimmen

Es ist nicht so einfach: var arr = eval(response.d); alert(arr[1]); -->> das erhält das gesamte Array zurück, nicht das 2. Element!

0 Stimmen

Es ist ein 2-d-Array! Versuch es: alert(arr[1][1]);

0 Stimmen

@balint - Ich nehme an, dass es funktioniert, wenn man es als zweidimensionales Array verwendet?

2voto

BYK Punkte 1350

Nun hier ist ein Code, den ich geschrieben habe, um ein XML-Objekt in ein natives JavaScript-Objekt (einschließlich Arrays) umzuwandeln. Sie müssen nur folgendes aufrufen:

Object.fromXML(yourXMLObject)

Und Sie erhalten ein natives JavaScript-Objekt, dessen JSON-Äquivalent diesem entspricht:

{
  ArrayOfString:
  [
    {string: ['1710', '1711', '1712', '1713']},
    {string: ['Teleszkóp 350mm gázas', 'Teleszkóp 150mm olaj', 'Teleszkóp 260mm olaj sárga', 'Teleszkóp 260mm elso']}
  ]
}

Der Quellcode der Funktion befindet sich unten.

/**
 * Versucht, eine gegebene XML-Daten in ein natives JavaScript-Objekt umzuwandeln, indem es den DOM-Baum durchläuft.
 * Wenn ein String übergeben wird, versucht es zunächst ein XMLDomElement aus dem gegebenen String zu erstellen.
 * 
 * @param {XMLDomElement|String} source Der XML-String oder das XMLDomElement, das vorzugsweise die erforderlichen Daten für das Objekt enthält.
 * @param {Boolean} [includeRoot] Ob der "erforderliche" Hauptcontainerknoten Teil des resultierenden Objekts sein soll oder nicht.
 * @return {Object} Das nativen JavaScript-Objekt, das aus den gegebenen XML-Daten erstellt wurde, oder false, wenn ein Fehler aufgetreten ist.
 */
Object.fromXML=function(source, includeRoot)
{
    if (typeof source=='string')
    {
        try
        {
            if (window.DOMParser)
                source=(new DOMParser()).parseFromString(source, "application/xml");
            else if (window.ActiveXObject)
            {
                var xmlObject=new ActiveXObject("Microsoft.XMLDOM");
                xmlObject.async=false;
                xmlObject.loadXML(source);
                source=xmlObject;
                xmlObject=undefined;
            }
            else
                throw new Error("XML-Parser nicht gefunden!");
        }
        catch(error)
        {
            return false;
        }
    }
    var result={};
    if (source.nodeType==9)
        source=source.firstChild;
    if (!includeRoot)
        source=source.firstChild;

    while (source) 
    {
        if (source.childNodes.length) 
        {
            if (source.tagName in result) 
            {
                if (result[source.tagName].constructor != Array) 
                    result[source.tagName] = [result[source.tagName]];
                result[source.tagName].push(Object.fromXML(source));
            }
            else 
                result[source.tagName] = Object.fromXML(source);
        }
        else if (source.tagName)
            result[source.tagName] = source.nodeValue;
        else
            result = source.nodeValue;
        source = source.nextSibling;
    }

    return result;
};

0voto

Seb Punkte 24444

Wenn es JSON wäre, müssten Sie nichts konvertieren ... z.B.:

var jsonString = ".....";
var converted = eval(jsonString);

JSON steht für JavaScript Object Notation, daher funktioniert alles, was im JSON-Format vorliegt, direkt in JavaScript.

Was Sie dort haben, ist XML. Sie sollten es überprüfen und manuell in JavaScript konvertieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X