Получение 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.
Для работы с JSON вам понадобится анализатор JSON для преобразования строкового представления JSON в объект.
а. Если вы используете JQuery, вы можете проверить
parseJSON()
функция. В качестве альтернативы, может иметь смысл использоватьgetJSON()
при получении данных - таким образом jQuery будет автоматически получать и анализировать ответ JSON. Как отмечено на странице документации, это действительно удобный методajax()
с соответствующими параметрами.б. С другой стороны, если вы не используете jQuery (а включение jQuery на страницу веб-сайта не считается), вы можете использовать
json-2
библиотека для JavaScript.с. Вы можете положиться на собственные возможности обработки JSON в браузере (не рекомендуется)
д. Как отмечает RobG в комментарии ниже, всегда есть
eval()
, Возможно, вы захотите прочитать этот ответ, а затем этот ответ, чтобы понять, почему, а почему нет, используяeval()
плохая идея ".Для структуры, которую вы опубликовали, если вы отформатируете литерал объекта, вы увидите, что это объект со свойством с именем
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"
,