Javascript 让Greasemonkey解释JSON数据

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

我正试图让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提取这些信息

非常感谢。

您看到的是-JavaScript对象表示法-它是一种轻量级数据交换格式,具有非常简洁的优点,它是JavaScript的子集,因此JSON字符串(一旦解析)可以用作JavaScript对象

jQuery与JSON字符串无关(只不过它可以生成和解析JSON字符串)——它是一个JavaScript库,可以让很多事情变得更容易,但没有什么是在普通JavaScript中做不到的

  • 要使用JSON,需要一个JSON解析器将JSON字符串表示转换为对象

    a。如果您使用的是jQuery,则可以签出该函数。或者,在获取数据时使用jQuery可能更有意义——这样jQuery将自动获取和解析JSON响应。正如文档页面上所指出的,这确实是一种使用适当参数的方便方法

    b。另一方面,如果您没有使用jQuery(而网站页面中包含的jQuery不算在内),您可以使用JavaScript库

    c。您可以依赖浏览器的本机JSON处理功能(不推荐)

    d。正如罗布在下面的评论中所指出的那样,总有一些问题。您可能需要阅读,然后了解为什么以及为什么不“使用
    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”

  • 您所看到的是——JavaScript对象表示法——它是一种轻量级数据交换格式,具有非常简洁的优点,即它是JavaScript的子集,因此JSON字符串(一旦解析)可以用作JavaScript对象

    jQuery与JSON字符串无关(只不过它可以生成和解析JSON字符串)——它是一个JavaScript库,可以让很多事情变得更容易,但没有什么是在普通JavaScript中做不到的

  • 要使用JSON,需要一个JSON解析器将JSON字符串表示转换为对象

    a。如果您使用的是jQuery,则可以签出该函数。或者,在获取数据时使用jQuery可能更有意义——这样jQuery将自动获取和解析JSON响应。正如文档页面上所指出的,这确实是一种使用适当参数的方便方法

    b。另一方面,如果您没有使用jQuery(而网站页面中包含的jQuery不算在内),您可以使用JavaScript库

    c。您可以依赖浏览器的本机JSON处理功能(不推荐)

    d。正如罗布在下面的评论中所指出的那样,总有一些问题。您可能需要阅读,然后了解为什么以及为什么不“使用
    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