代码之家  ›  专栏  ›  技术社区  ›  Richard Reddy

如何使用jquery从json中提取信息

  •  0
  • Richard Reddy  · 技术社区  · 16 年前

    我有一个json响应,它使用 JavascriptSerializer Class . 我当前从查询中获取以下json:

    {"d":"[{\"Lat\":\"51.85036\",\"Long\":\"-8.48901\"},{\"Lat\":\"51.89857\",\"Long\":\"-8.47229\"}]"}
    

    我下面的代码有问题,希望有人能给我一些启示。我似乎无法从返回给我的值中获取信息。理想情况下,我希望能够读取返回给我的每一行的lat和long值。

    以下是我目前拥有的:

    $.ajax({
                        type: "POST",
                        url: "page.aspx/LoadWayPoints",
                        data: "{'args': '" + $('numJourneys').val() + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg) {
                            if (msg.d != '[]') {
                                var lat = "";
                                var long = "";
                                $.each(msg.d, function () {
                                    lat = this['Lat'];
                                    long = this['Long'];
                                });
                                alert('lat =' + lat + ', long =' + long);
                            }
                        }
                    });
    

    我认为问题与json的格式有关,但我可能不正确。任何帮助都很好。

    谢谢, 丰富的

    4 回复  |  直到 16 年前
        1
  •  2
  •   Jess    16 年前

    正在发生的是,json被编码在json中的一个字符串中。这是多余的,但有一个解决方案不改变你的输出方法。

    为了处理这个问题,jquery有一个json解析器( $.parseJSON() )可以使用do解析响应中的字符串。

    所以我相信你会这样做:

    $.ajax({
                    type: "POST",
                    url: "page.aspx/LoadWayPoints",
                    data: "{'args': '" + $('numJourneys').val() + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        if (msg.d != '[]') {
                            var content = $.parseJSON(msg.d);
    
                            var lat = "";
                            var long = "";
                            $.each(content, function () {
                                lat = this['Lat'];
                                long = this['Long'];
                            });
                            alert('lat =' + lat + ', long =' + long);
                        }
                    }
                });
    
        2
  •  1
  •   dlamotte    16 年前

    看起来您的json构建不正确:

    {"d":"[{\"Lat\":\"51.85036\",\"Long\":\"-8.48901\"},{\"Lat\":\"51.89857\",\"Long\":\"-8.47229\"}]"}
    

    可能应该是:

    {"d":[{"Lat":"51.85036","Long":"-8.48901"},{"Lat":"51.89857","Long":"-8.47229"}]}
    

    注意到 {"d":"..."} ?看起来你的“d”指向的是字符串,而不是数组。

        3
  •  0
  •   Raja    16 年前

    请试试这个:

     $.each(msg.d, function () {
                                    lat = this['Lat'];
                                    long = this['Long'];
                                });
    

    经过json之后,没有maplatposition或maplongposition

    高温高压

        4
  •  0
  •   David    16 年前

    我想你需要这样的东西:

    $.ajax({
        type: "POST",
        url: "page.aspx/LoadWayPoints",
        data: "{'args': '" + $('numJourneys').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            $.each(msg.d, function () {
                var lat = "";
                var long = "";
                lat = this.Lat; // Lat/Long this is how you called it in your JSON responce
                long = this.Long;
                alert('lat =' + lat + ', long =' + long);
            });
        }
    });
    

    希望有帮助

    • 此外,作为 XYLD 上面提到过,看看你的json