Разбор JSON из локального URL с JQuery - PullRequest
2 голосов
/ 05 ноября 2011

У меня есть локальный URL, где я могу получить файл JSON. У меня также есть простой веб-сайт, созданный с использованием JQuery.

Я просмотрел множество сайтов с учебными пособиями и примерами кода о том, как извлечь входные данные json и проанализировать их, чтобы я мог отобразить их на своем сайте. Однако не были полезны, так как я до сих пор не могу заставить его работать.

Так что в крайнем случае я собираюсь попросить stackoverflow за вашу помощь. У меня много знаний о Java, но я относительно новичок в веб-разработке и знаю некоторые основы JavaScript.

Это пример вывода моего URL:

[
    {
        "baken": "not implemented...",
        "deviceType": "Optimus 2X",
        "batteryLevel": "1.0",
        "gps": {
            "speed": 0,
            "Date": "TueNov0100: 34: 49CET2011",
            "Accuracy": 35,
            "longitude": {removed},
            "latitude": {removed},
            "Provider": "gps"
        },
        "deviceId": "4423"
    },
    {
        "baken": "notimplemented...",
        "deviceType": "iPhone",
        "batteryLevel": "30.0",
        "gps": {
            "speed": 0,
            "Date": "TueNov0116: 18: 51CET2011",
            "Accuracy": 65,
            "longitude": {removed},
            "latitude": {removed},
            "Provider": null
        },
        "deviceId": "4426"
    }
]

Надеюсь, вы можете помочь мне ..

Ответы [ 5 ]

6 голосов
/ 05 ноября 2011

Если вы используете локальный веб-сервер, а веб-сайт и файл json обслуживаются им, вы можете просто сделать:

$.getJSON('path/to/json/file.json', function(data) {
  document.write(data);
})

Если вы просто используете файлы и не используете веб-сервер, вы можете получитьпроблема с политикой origin браузера, так как AJAX-запрос не может быть отправлен через междоменный домен, а исходный домен по умолчанию равен «null» для запроса из локальных файлов.

Если вы используете Chrome, вы можете попробовать--allow-file-access-from-files параметр для разработки.

2 голосов
/ 05 ноября 2011

Ваш URL возвращает недействительный JSON.Попробуйте вставить его на jsonlint.com и проверить его там, и вы поймете, что я имею в виду.Даже выделение кода здесь в stackoverflow показывает вам, что не так.:)

Редактировать: Для анализа вы можете использовать jQuery.parseJSON

 jQuery.parseJSON('{"foo": "goo"}');
1 голос
/ 05 ноября 2011

Вам не нужно разбирать JSON - вот почему людям это нравится. Это становится нативным объектом JavaScript.

Для вашего примера, если вы поместите результаты в переменную с именем data, вы можете сделать что-то вроде этого:

 data[0].deviceType // would be "Optimus 2x"
 data[0].gps.speed  // would be numeric 0

и т.д.

1 голос
/ 05 ноября 2011

Самый естественный способ - позволить jQuery сделать вызов AJAX для вас, как только вы уже зашли на страницу. Вот пример:

    $.ready(function() {

         // put your other code for page initialization here

         // set up a global object, for namespacing issues, to hold your JSON.
         // this allows your to be a good "web" citizen, because you will create
         // one object in the global space that will house your objects without
         // clobbering other global objects from other scripts, e.g., jQuery
         // makes the global objects '$' and 'jQuery' 
         myObjects = {};

         // start JSON retrieval here
         $.getJSON('/path/to/json/file.json', function(data) {
             // 'data' contains your JSON.
             // do things with it here in the context of this function.
             // then add it to your global object for later use.
             myObjects.myJson = data; 
         });

    });

Документация по API здесь

1 голос
/ 05 ноября 2011
$.get('/some.json', function(data) {
  // data[0]["baken"] == "not implemented..."
});

См. http://api.jquery.com/jQuery.get/

...