Javascript 让Greasemonkey解释JSON数据
我正试图让Greasemonkey为我自动化一个站点,我不想一次提取一个信息。所以我环顾四周,发现了jQuery。由于对Greasemonkey脚本非常陌生,我仍然觉得这有点困难,但如果有人能给我指出正确的方向,这将非常有帮助。我希望Greasemonkey提取我认为链接到jQuery的文件中的信息。当我在页面上运行Firebug时,我得到:Javascript 让Greasemonkey解释JSON数据,javascript,jquery,json,greasemonkey,Javascript,Jquery,Json,Greasemonkey,我正试图让Greasemonkey为我自动化一个站点,我不想一次提取一个信息。所以我环顾四周,发现了jQuery。由于对Greasemonkey脚本非常陌生,我仍然觉得这有点困难,但如果有人能给我指出正确的方向,这将非常有帮助。我希望Greasemonkey提取我认为链接到jQuery的文件中的信息。当我在页面上运行Firebug时,我得到: http://www.trada.net/javascript/jquery-1.4.2.min.js http://www.trada.net/REST
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提取这些信息
非常感谢。您看到的是-JavaScript对象表示法-它是一种轻量级数据交换格式,具有非常简洁的优点,它是JavaScript的子集,因此JSON字符串(一旦解析)可以用作JavaScript对象
jQuery与JSON字符串无关(只不过它可以生成和解析JSON字符串)——它是一个JavaScript库,可以让很多事情变得更容易,但没有什么是在普通JavaScript中做不到的
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);
}
}
在外部循环的每次迭代中,currEntry
将为您提供对d
内部数组的引用。然后可以迭代该数组以获得每行的值。如果你已经知道你想要的是哪一行,你也可以直接索引到其中(不过要注意不存在的索引)data.d[4][10]
将为您提供“ZAR”
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);
}
}
在外部循环的每次迭代中,currEntry
将为您提供对d
内部数组的引用。然后可以迭代该数组以获得每行的值。如果你已经知道你想要的是哪一行,你也可以直接索引到其中(不过要注意不存在的索引)data.d[4][10]
将为您提供“ZAR”
JSON包含一个2-D数组,因此请考虑以这种方式访问数据。 例如,给定的JSON以11x17数组的形式返回
d
这些行如下所示:
["", "", "y", "ZAR", "1", "49517", "6458, 8270, 8270, 8270, 7635", null, "1.40", "6458", "0:13:30", "", "12", "", "C", "30", null]
我想你可以弄清楚这些列是什么(没有足够的信息提供给我们)
所以,这里有一个完整的GM脚本,列出了Firebug控制台的所有第7列
// ==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包含一个2-D数组,因此请考虑以这种方式访问数据。 例如,给定的JSON以11x17数组的形式返回
d
这些行如下所示:
["", "", "y", "ZAR", "1", "49517", "6458, 8270, 8270, 8270, 7635", null, "1.40", "6458", "0:13:30", "", "12", "", "C", "30", null]
我想你可以弄清楚这些列是什么(没有足够的信息提供给我们)
所以,这里有一个完整的GM脚本,列出了Firebug控制台的所有第7列
// ==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转换为对象,但这并不是必需的。JSON可以通过以下方式转换为javascript对象:
var data=eval(“(“+string+”)”)
将在使用中的所有支持脚本的浏览器中运行。@RobG好吧,这太尴尬了:/当然,你是对的。将它添加到答案中。虽然使用各种函数将JSON转换为对象很方便,但这并不是必需的。JSON c