Получение Greasemonkey для интерпретации данных JSON - PullRequest
1 голос
/ 22 мая 2011

Я пытаюсь заставить 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 ]

3 голосов
/ 22 мая 2011

Этот 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]);
    }
);
1 голос
/ 22 мая 2011

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

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

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

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

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

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

    d.Как отмечает 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".

...