Как я могу получить конкретные данные из JSON?

0

Как я могу получить конкретные данные от 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.

Текущий:

[{"Название": "kola"}, {"Название": "yilmaz ozdil"}, {"Название": "dvd"}, {"Название": "действительно безумно глубоко"}, {"Название": deptivo de la coruna "}, {" Название ":" sizi seven kisiyle sevdiginiz kisinin farkli olmasi "}, {" Название ":" kadinlarin bavul gibi canta tasimalari "}, {" Название ":" hosbuldum "}, {" Название ":" sark cibani "}, {" Title ":" mevsimler gecerken "}, {" Название ":" bir kerede kolon gibi sicmak "}, {" Название ":" gelismek "}, {" Название ":" faz ("Название": "memetq"}, {"Название": "ogrencilerin sinav kagidina dustugu ilginc notlar"}, {"Название": "cami duvarina isemek"}, {"Название": "kufurden" sonra tovbe etmek "}, {" Title ":" gida tarim ve hayvancilik bakanligi "}, {" Название ":" cevre orman ve sehircilik bakanligi "}, {" Название ":" google da nikah masasi calmak "}, {" TotalPageCount ": 9}, {" TotalTitleCount ": 199}]

С моим кодом и приведенными примерами я все равно не смог получить TotalPageCount и TotalTitleCount.

Для записи: Возможно, в следующий раз я смогу добавить дополнительные атрибуты рядом с заголовком. Поэтому я хотел бы сохранить этот формат json.

Благодарим за продвижение

  • 1
    Данные [0] .TotalPageCount
  • 0
    Не используйте for-in для массивов и не делайте $("#titlesDiv").html($("#titlesDiv").html() + поскольку это излишне разрушительно и неэффективно. Я не могу поверить, что Ответчики не исправляют эти паттерны.
Показать ещё 1 комментарий
Теги:

4 ответа

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>
0

Вы используете jQuery правильно? Вы можете попробовать что-то вроде этого:

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

После этого у вас будет массив ответов в ar. Таким образом вы сможете получить доступ к своим требуемым значениям:

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

Я надеюсь, что это поможет вам. Удачи.

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>
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>"
          );
     }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню