如何从JSON获取特定数据?

时间:2014-01-11 20:09:51

标签: javascript json jquery

如何从 JSON 获取特定数据?

JSON:

[
    { "TotalPageCount":  66 },
    { "TotalTitleCount": 199 },
    { "Title":           "cola" },
    { "Title":           "elvis tom" },
    { "Title":           "dvd" }
]

Javascript代码:

<script>
    function updateTitlesArea() {
        $.getJSON(
        "/lates/json/",
        null,
        function(data) {
            $("#titlesDiv").html("");
            $("#pagesDiv").html("");
            var x;
            if (data.length > 0) {
                for (x in data) {
                    $("#titlesDiv").html($("#titlesDiv").html() +
                        "<li><a href=\"/" + data[x].Title.replace(/ /g, '-') + "\">" + data[x].Title + "</a>" +
                        "</li>"
                );
                }
            } else {
                $("#titlesDiv").html("<li>no entry</li>");
            }
        });
    }
</script>

我正在尝试{"TotalPageCount":66}{"TotalTitleCount":199} 来自Javascript。请给我一个方法来获取它们?

非常感谢。

更新

出了点问题,我尝试了所有解决方案,但效果不佳。 我控制了json格式:

当前的Json Builder:

                if (title.Any())
                {
                    foreach (var x in title)
                    {
                        result.AddLast(new { Title = x.Title });
                    }
                }
                result.AddLast(new { TotalPageCount = totalPageCount });
                result.AddLast(new { TotalTitleCount = totalTitleCount });

                return Json(result.ToList(), JsonRequestBehavior.AllowGet);

我对json格式进行了一些小改动,将总页数和标题数量计入json的结尾。

当前

  

[{ “标题”: “草”},{ “标题”:“耶尔马兹   ozdil“},{”Title“:”dvd“},{”Title“:”真的很疯狂   deep“},{”Title“:”deportivo de la coruna“},{”Title“:”sizi seven   kisiyle sevdiginiz kisinin farkli olmasi“},{”Title“:”kadinlarin bavul   gibi canta tasimalari“},{”Title“:”hosbuldum“},{”Title“:”sark   cibani“},{”Title“:”mevsimler gecerken“},{”Title“:”bir kerede kolon   “我不知道”   bilimi“},{”Title“:”memetq“},{”Title“:”ogrencilerin sinav kagidina   dustugu ilginc notlar“},{”Title“:”cami duvarina   isemek“},{”Title“:”kufurden sonra tovbe etmek“},{”Title“:”gida tarim   ve hayvancilik bakanligi“},{”Title“:”cevre orman ve sehircilik   bakanligi“},{”Title“:”google da nikah masasi   calmak “},{” TotalPageCount “:9},{” TotalTitleCount“:199}]

使用我的代码和给出的示例,我仍然无法获得TotalPageCount和TotalTitleCount。

记录:也许下次我可以在标题旁边添加更多属性。 所以我想保留json格式。

感谢您提前

4 个答案:

答案 0 :(得分:1)

当您执行x in data时,您将获得每个对象的关键字。所以你必须做一个简单的检查,看它是TotalPageCount还是TotalTitleCount。像这样;

<script>
    function updateTitlesArea() {
        $.getJSON(
            "/lates/json/",
            null,
            function(data) {
                var x, totalPageCount, totalTitleCount;
                $("#titlesDiv").html("");
                $("#pagesDiv").html("");
                if (data.length > 0) {
                    for (x in data) {
                        if('TotalPageCount' == x) {
                            totalPageCount = data[x];
                            continue;
                        }
                        if('TotalTitleCount' == x) {
                            totalTitleCount = data[x];
                            continue;
                        }
                        $("#titlesDiv").html($("#titlesDiv").html() +
                            "<li><a href=\"/" + data[x].Title.replace(/ /g, '-') + "\">" + data[x].Title + "</a>" +
                            "</li>"
                        );
                    }
                    // You can do here whatever you want with 'totalPageCount' and 'totalTitleCount'
                } else {
                    $("#titlesDiv").html("<li>no entry</li>");
                }
            });
    }
</script>

答案 1 :(得分:0)

这是一个数组,所以

if (data.length > 0) {
    var obj = data[0];   // array, not object
     for (key in obj) { 
          $("#titlesDiv").html(
              $("#titlesDiv").html() +
                 "<li><a href=\"/" + obj[key].Title.replace(/ /g, '-') + "\">" + 
                     obj[key].Title + "</a>" +
                 "</li>"
          );
     }

答案 2 :(得分:0)

你正在使用jQuery吗?你可以尝试这样的事情:

var prom = $.getJSON('/lates/json/'),
    ar;
prom.then(function (data) { ar = data; });

之后,您将在 ar 中拥有响应数组。您将能够以这种方式访问​​所需的值:

ar[0].TotalPageCount
ar[1].TotalTitleCount

我希望这会对你有所帮助。祝你好运。

答案 3 :(得分:0)

使用您当前的JSON格式,它就是这样的。不过,如果你能改变JSON格式会更好。

<script>
    function updateTitlesArea() {
        $.getJSON(
            "/lates/json/",
            null,
            function(data) {
                $("#titlesDiv").html('<ul></ul>'); // <li> goes inside <ul> or <ol>
                $("#pagesDiv").empty();

                var has_titles = false;

                for(var i = 0; i < data.length; i++) {
                    if("Title" in data[i]) {
                        $("#titlesDiv ul").append(
                            '<li><a href="/' + data[i].Title.replace(/ /g, '-') + '">' + data[i].Title + "</a>" +
                            "</li>"
                        );
                        has_titles = true;
                    }
                }
                if( !has_titles ) {
                    $("#titlesDiv ul").html("<li>no entry</li>");
                }
            }
        );
    }
</script>