Анализ структуры данных в формате JSON?

#jquery #json

#jquery #json

Вопрос:

Я пытаюсь использовать эти данные через ajax. Вот так:

 var $data = $.get('/data.js', function(data){
        console.log($(data));
});
  

В data.js файл, в котором у меня есть этот объект:

 var data = {
    "testData" : {
        "order" : [21,22,33,32,55,20,41],
        "categories" : {
            "41" : {
                "id" : 41,
                "title" : "Foo",
                "count" : 100,
                "href" : "/foo/Foo/"
            },
            "20" : {
                "id" : 20,
                "title" : "Bar",
                "count" : 100,
                "href" : "/foo/Bar/"
            }
        }
    },
    "following" : {
        "order" : [6,5,4,3,1,0],
        "friends" : {
            "0" : {
                "id" : "0",
                "name" : "Friend Name",
                "href" : "/test/link",
                "title" : "Friend Name"
            },
            "1" : {
                "id" : "1",
                "name" : "Friend2 Name",
                "href" : "/test/link2",
                "title" : "Friend2 Name"
            }
        }
    }
};
  

Чего я здесь не понимаю? Есть ли способ использовать и анализировать эти данные без изменения фактического источника данных?

Комментарии:

1. Это не JSON, это объект JavaScript.

2. @Felix, было бы точнее сказать «Это не JSON, это JavaScript».

3. @Squeegy: Достаточно справедливо 😉

4. Безусловно, я понимаю, что это не объект JSON, а объект JavaScript, и это был мой вопрос. Возможно ли вызвать это, как у меня, и использовать его как есть. Спасибо вам, ребята, за быстрые ответы!!

Ответ №1:

data объект JavaScript отправляется по ответу, поэтому я предлагаю изменить файл на JSON и использовать его таким образом:

 $.get('/data.json', function(data){
    // do here what you need to do with returned data or call callback
    console.log(data);
}, 'json');
  

data.json файл должен выглядеть примерно так (в основном только объектная нотация, без присвоения и т.д.):

 {
    "testData" : {
        "order" : [21,22,33,32,55,20,41],
        "categories" : {
            "41" : {
                "id" : 41,
                "title" : "Foo",
                "count" : 100,
                "href" : "/foo/Foo/"
            },
            "20" : {
                "id" : 20,
                "title" : "Bar",
                "count" : 100,
                "href" : "/foo/Bar/"
            }
        }
    },
    "following" : {
        "order" : [6,5,4,3,1,0],
        "friends" : {
            "0" : {
                "id" : "0",
                "name" : "Friend Name",
                "href" : "/test/link",
                "title" : "Friend Name"
            },
            "1" : {
                "id" : "1",
                "name" : "Friend2 Name",
                "href" : "/test/link2",
                "title" : "Friend2 Name"
            }
        }
    }
}
  

Помните, что JavaScript лучше всего подходит для программирования на основе событий. Вероятно, вам следует закодировать свое решение с использованием обратных вызовов, потому что иногда оно выполняется асинхронно и возвращает значение до фактического завершения выполнения.

Комментарии:

1. @FelixKling: .getJSON() это просто ярлык для .get() , который является ярлыком для .ajax() .

2. Я знаю, но это более выразительно и будет автоматически анализировать JSON, чего может быть не в случае с get , если тип содержимого установлен неправильно.

3. @FelixKling: Нет, предположение будет основано на типе MIME (см. dataType Настройку на .ajax() странице документации ). Но я изменил свой ответ, чтобы он был задан явно. Спасибо. Дайте мне знать, если у вас возникнут какие-либо другие вопросы.