如何使用jQuery从JSON中提取信息

时间:2010-04-19 17:35:31

标签: c# jquery json parsing

我有一个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的格式有关,但我可能不正确。任何帮助都会很棒。

谢谢, 富

4 个答案:

答案 0 :(得分:2)

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

为了解决这个问题,jQuery有一个JSON解析器($.parseJSON())你可以用来解析响应中的字符串。

所以我相信你会这样做:

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

答案 1 :(得分:1)

看起来您的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”指向一个字符串,而不是一个数组。

答案 2 :(得分:0)

请试试这个:

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

经过JSON后,没有MapLatPosition或MapLongPosition

HTH

答案 3 :(得分:0)

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

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