【问题标题】:how to extract information from JSON using jQuery如何使用 jQuery 从 JSON 中提取信息
【发布时间】:2010-04-19 17:35:31
【问题描述】:

我有一个 JSON 响应,它使用 JavascriptSerializer Class 从我的 C# WebMethod 格式化。我目前从我的查询中得到以下 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 的格式有关,但我可能不正确。任何帮助都会很棒。

谢谢, 丰富

【问题讨论】:

    标签: c# jquery json parsing


    【解决方案1】:

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

    为了处理这个问题,jQuery 有一个 JSON 解析器 (@987654321@),您可以使用它来解析响应中的字符串。

    所以我相信你会这样做:

    $.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);
        }
      }
    });
    

    【讨论】:

    • 就是这样。非常感谢您的解决方案。当我有机会时,我将不得不找出为什么 JavascriptSerializer 类会再次这样做:)
    【解决方案2】:

    看起来您的 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】:

      请试试这个:

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

      通过 JSON 后没有 MapLatPosition 或 MapLongPosition

      HTH

      【讨论】:

        【解决方案4】:

        我认为你需要这样的东西:

        $.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

        【讨论】:

          猜你喜欢
          • 2012-07-14
          • 2012-01-18
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 1970-01-01
          • 2019-09-06
          相关资源
          最近更新 更多