Jquery с JSON Array - преобразовать в Javascript Array - PullRequest
2 голосов
/ 15 апреля 2009

У меня есть следующий вывод XML из веб-службы asp.net:

<ArrayOfArrayOfString><ArrayOfString><string>1710</string><string>1711</string><string>1712</string><string>1713</string></ArrayOfString><ArrayOfString><string>Teleszkóp 350mm gázas</string><string>Teleszkóp 150mm olaj</string><string>Teleszkóp 260mm olaj sárga</string><string>Teleszkóp 260mm első</string></ArrayOfString></ArrayOfArrayOfString>

Я использую $ Ajax JQuery, чтобы получить его с сервера, он отлично работает. Он преобразован в объект JSON, но как я могу преобразовать его обратно в массив Javascript?

обновление : проблема в том, что, если он анализируется с помощью eval (), этот массив массивов становится только одной строкой!

Ответы [ 7 ]

5 голосов
/ 15 апреля 2009

Это не объект JSON: это xml. JSON по сути - это javascript, и будет выглядеть примерно так:

[["1710", "1711", "1712", "1713"], ["Teleszkóp 350mm gázas", "Teleszkóp 150mm olaj", "Teleszkóp 260mm olaj sárga", "Teleszkóp 260mm első"]]

2 голосов
/ 15 апреля 2009

Ну вот код, который я написал для преобразования объекта XML в собственный объект JavaScript (включая массивы). Вам просто нужно позвонить

Object.fromXML(yourXMLObject)

И вы получите нативный объект JavaScript, эквивалент JSON которого таков:

{
  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 első']}
  ]
}

Источник функции указан ниже.

/**
 * Tries to convert a given XML data to a native JavaScript object by traversing the DOM tree.
 * If a string is given, it first tries to create an XMLDomElement from the given string.
 * 
 * @param {XMLDomElement|String} source The XML string or the XMLDomElement prefreably which containts the necessary data for the object.
 * @param {Boolean} [includeRoot] Whether the "required" main container node should be a part of the resultant object or not.
 * @return {Object} The native JavaScript object which is contructed from the given XML data or false if any error occured.
 */
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("Cannot find an XML parser!");
        }
        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;
};
2 голосов
/ 15 апреля 2009
var array = eval(json.d);

Где массив - это массив javascript, а json - это объект json, а json.d - строка json.

2 голосов
/ 15 апреля 2009

Я предполагаю, что ваши данные возвращаются и автоматически анализируются jQuery и помещаются в XML-документ. Это один из способов уплощения объекта XML в массив:

   my parsedData = [];  
   $('result', data).each(function() {
      parsedData.push(  
         { name: $('name', this).text(),
           addr: $('addr', this).text(),
           city: $('city', this).text(),
           state: $('state', this).text(),
           zip: $('zip', this).text()
      });
0 голосов
/ 11 сентября 2012

Ваш вопрос, кажется, не соответствует его названию, но прочитав его несколько раз, я думаю, что ответ будет (в javascript):

var JSONstring = '{"something":"like this"}';
var newArray = JSON.parse(JSONstring);

Работает в Firefox 15.0.1

Способ jQuery:

 newArray = $.parseJSON(JSONstring);
0 голосов
/ 15 апреля 2009

Если вы явно сказали jQuery, что ожидаете возврата XML-документа (используя опцию dataType ), или если вы не указали тип данных и сервер отправляет его правильно в любом случае, как XML (в этом случае jQuery будет угадывать и возвращать вам responseXML вместо responseText), вы должны иметь возможность использовать следующее в вашей функции обратного вызова успеха для извлечения массива строк из XML, где data является документом XML:

$(data).find("ArrayOfString").map(function()
{
    return $(this).find('string').map(function()
    {
        return $(this).text();
    });
});
0 голосов
/ 15 апреля 2009

Если бы это было JSON , вам не нужно ничего конвертировать ... например ::

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

JSON означает нотацию объектов JavaScript, поэтому все, что в формате JSON, работает непосредственно в JavaScript.

То, что у вас есть, это XML. Вы должны пройти через это и конвертировать в JavaScript вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...