Получение Greasemonkey для интерпретации данных JSON

Я пытаюсь заставить Greasemonkey автоматизировать сайт для меня, и я не хочу извлекать информацию по одному. Поэтому я осмотрелся и обнаружил jQuery. Будучи очень новым для скриптов Greasemonkey, я все еще нахожу это немного сложным, но если бы кто-то мог указать мне правильное направление, это бы очень помогло. Я хочу, чтобы Greasemonkey извлекал информацию из файлов, которые, как я предполагаю, связаны с jQuery. Когда я запускаю Firebug на странице, я получаю:

http://www.trada.net/javascript/jquery-1.4.2.min.js
http://www.trada.net/REST_Service/REST_Auction.svc/GetAuctionData?_=1306009003654

с этой информацией внутри:

{
    "d": [
        [ "", "", "y", "ZAR", "1", "49517", "8270, 8270, 8270, 7635, 8270", null,
          "1.34", "8270", "0:13:30", "", "12", "", "C", "30", null ],
        [ "", "", "y", "ZAR", "2", "49582", "6725, 6725, 7863, 9228", null,
          "***0.78***", "6725", "0:12:37", "", "5", "", "L", null, null ],
        [ "", "", "y", "ZAR", "3", "49058", "5153, 9216, 6058, 9216, 5153", null,
          "180.80", "5153", "0:00:59", "", "1100", "", "T", null, null ],
        [ "", "", "y", "ZAR", "4", "49581", "0051, 6692, 9555, 6692, 9555", null,
          "1.35", "0051", "0:00:14", "", "12", "", "T", null, null ],
        [ "", "", "y", "ZAR", "5", "49584", "6725, 6725, 9822", null,
          "0.93", "6725", "0:14:28", "", "5", "", "L", null, null ],
        [ "", "", "y", "ZAR", "6", "49583", "9822, 7863, 9228", null,
          "0.75", "9822", "0:15:05", "", "5", "", "L", null, null ],
        [ "", "", "y", "ZAR", "7", "49544", "0957, 0957, 0957, 0957, 0957", null,
          "10.00", "0957", "0:01:59", "", "55", "", "T", null, null ],
        [ "", "", "y", "ZAR", "8", "49575", "2110, 5661, 9295, 2110, 3809", null,
          "3.05", "2110", "0:00:13", "", "29", "", "T", null, null ],
        [ "", "", "y", "ZAR", "9", "49496", "7863, 5845, 7863, 7158, 7158", null,
          "2.41", "7863", "0:05:55", "", "10", "", "B", null, null ],
        [ "", "", "y", "ZAR", "10", "49524", "7863, 7863, 5845, 7863, 0764", null,
          "1.57", "7863", "0:05:49", "", "5", "", "B", null, null ],
        [ "", "", "y", "ZAR", "11", "49539", "7863, 7863, 0764, 2427, 2427", null,
          "1.92", "7863", "0:03:54", "", "10", "", "B", null, null ]
    ]
}

Я могу разобраться в информации, и она обновляется каждую секунду, но как мне заставить Greasemonkey интерпретировать информацию? Скажем, например, я хочу, чтобы каждый фрагмент информации в строке 4 читался в свою собственную переменную:

"1.34", "8270", "0:13:30", "", "12", "", "C", "30", null

Как мне заставить Greasemonkey извлечь эту информацию?

Большое спасибо.

2 ответа

Решение

Этот JSON содержит двумерный массив, так что подумайте о доступе к данным таким образом. Например, данный JSON возвращает d как массив 11 на 17.

Строки похожи на:

["", "", "y", "ZAR", "1", "49517", "6458, 8270, 8270, 8270, 7635", null, "1.40", "6458", "0:13:30", "", "12", "", "C", "30", null]

Я предполагаю, что вы можете выяснить, что такое столбцы (недостаточно информации для нас).

Итак, вот полный сценарий GM, в котором перечислены все 7-е столбцы для консоли Firebug...

// ==UserScript==
// @name            _Fun with JSON
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// ==/UserScript==

var myJson              = '{"d":[["","","y","ZAR","1","49517","6458, 8270, 8270, 8270, 7635",null,"1.40","6458","0:13:30","","12","","C","30",null],["y","-00:00","y","ZAR","2","49593","6458, 6458, 6458, 6458, 6458",null,"2.92","6458","0:13:37","","12","","L","12","Ve4mYdrvkkQMKxBH1\/1VMtDTCDQBRspg5jB8jjY08zg="],["","","y","ZAR","3","49058","7456, 9216, 6458, 5153, 7456",null,"194.40","7456","0:00:31","","1100","","T",null,null],["","","y","ZAR","4","49597","2935, 6554",null,"1.22","2935","0:01:16","","12","","T",null,null],["","","y","ZAR","5","49590","4440, 0518, 5343, 2625, 4848",null,"0.95","4440","0:15:58","","5","","L",null,null],["","","y","ZAR","6","49591","4848, 4440, 4440, 0518, 2625",null,"1.81","4848","0:16:05","","12","","L",null,null],["","","y","ZAR","7","49595","6458",null,"5.55","6458","0:04:13","","55","","T",null,null],["","","y","ZAR","8","49596","",null,"2.90","NONE","0:04:35","","29","","T",null,null],["","","y","ZAR","9","49496","6458, 2427, 2427, 7863, 5845",null,"2.56","6458","0:06:07","","10","","B",null,null],["","","y","ZAR","10","49524","6458, 2427, 7863, 7863, 5845",null,"1.67","6458","0:06:00","","5","","B",null,null],["","","y","ZAR","11","49539","6458, 2427, 7863, 7863, 0764",null,"2.02","6458","0:04:25","","10","","B",null,null]]}'
var jsonObj             = $.parseJSON (myJson);

//--- The JSON should return a 2-D array, named "d".
var arrayOfAuctions     = jsonObj.d;

//--- Loop over each row in the array.
$.each (
    arrayOfAuctions,
    function (rowIndex, singleAuctionData) {

        //--- Print the 7th column.
        console.log ('Row: ' + (parseInt (rowIndex) + 1) + ' Column: 7  Value: ' + singleAuctionData[6]);
    }
);

То, на что вы обращаете внимание, - это JSON - нотация объектов JavaScript - это легкий формат обмена данными с очень удобным преимуществом, состоящим в том, что он является подмножеством JavaScript, поэтому строка JSON (после анализа) может использоваться в качестве объекта JavaScript.

JQuery не имеет ничего общего со строками JSON (за исключением того, что он может генерировать и анализировать их) - это библиотека JavaScript, которая позволяет делать много вещей, но ничего такого, чего вы не могли бы сделать в простом JavaScript.

  1. Для работы с JSON вам понадобится анализатор JSON для преобразования строкового представления JSON в объект.

    а. Если вы используете JQuery, вы можете проверить parseJSON() функция. В качестве альтернативы, может иметь смысл использовать getJSON() при получении данных - таким образом jQuery будет автоматически получать и анализировать ответ JSON. Как отмечено на странице документации, это действительно удобный метод ajax() с соответствующими параметрами.

    б. С другой стороны, если вы не используете jQuery (а включение jQuery на страницу веб-сайта не считается), вы можете использовать json-2 библиотека для JavaScript.

    с. Вы можете положиться на собственные возможности обработки JSON в браузере (не рекомендуется)

    д. Как отмечает RobG в комментарии ниже, всегда есть eval(), Возможно, вы захотите прочитать этот ответ, а затем этот ответ, чтобы понять, почему, а почему нет, используя eval() плохая идея ".

  2. Для структуры, которую вы опубликовали, если вы отформатируете литерал объекта, вы увидите, что это объект со свойством с именем d который является массивом. Содержимое этого массива является самим массивом. Итак, когда строка JSON была проанализирована в объекте, вы можете сделать это:

    var data = parseJSON(jsonString); //get a JavaScript objet
    for(var i = 0; i < data.d.length; i++){
        var currEntry = data.d[i];
        for(var j = 0; j < currEntry.length; j++){
            var currVal = currEntry[j];
            console.log(currVal);
        }
    }
    

    Если вы используете JQuery, вы можете использовать $.each()

    var data = parseJSON(jsonString);
    $.each(data.d, function(index, currEntry){
        $.each(currEntry, function(index, currVal){
            console.log(currVal);
        }
    });
    

    В каждой итерации внешнего цикла currEntry даст вам ссылку на массив внутри d, Затем вы можете перебрать этот массив, чтобы получить значения для каждой строки. Если вы уже знаете, какую "строку" вы хотите, вы также можете индексировать ее напрямую (хотя остерегайтесь несуществующих индексов). data.d[4][10] дам тебе "ZAR",

Другие вопросы по тегам