Чтение нескольких страниц JSON API и анализ данных

Цель. Чтобы собрать данные JSON из API прогнозов, а затем прочитать свойство JSON precipIntensity в течение указанного количества дней, этот код начинается с трех. Поскольку это требует последовательного выполнения ряда шагов, постарайтесь разобраться во всем коде.

Моя основная проблема заключается в попытке назвать возвращаемые кодовые страницы JSON, а затем поместить их в другой контекст для чтения свойства precipIntensity.

Вкратце: обратная дата получает время UNIX, а затем запрашивает API для каждого прогнозируемого дня. Затем API помещаются в массив. Массив помещается в цикл for() для запроса каждого сценария JSON... (что теперь делать? Я хотел бы иметь возможность читать каждый или что-то вычислять, но я не знаю, как запросить отформатированный код. Я можно сделать оставшуюся часть). Образец JSON можно найти в другом моем сообщении... https://stackoverflow.com/questions/29949454/store-json-api-object-data-and-reuse-it (я обнаружил, что сервер API хранит данные для меня... решено) EDITED с 5 /1/15:

    //Get the back dated times and current in UNIX, 
   //later make a lookup that gives datediff from current date and user's date and adjust index i condition to equal exact days.
            var totalPrecipSinceDate;
            var threeDayAPITimes = [];

            for (var i = 0; i <= 2; i++) //place user userData-1 where i <= input
        {
            var myDate = new Date(); //https://stackoverflow.com/questions/7693170/javascript-convert-from-epoch-string-to-date-object
            var epoch = myDate.getTime(); //1318023197289 number of ms since epoch
            var unixEpoch = Math.round(epoch/1000)
            threeDayAPITimes[i] = Math.round(unixEpoch - (86400 * i));
                /*
                var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
                threeDayAPITimes[i] = Math.round(epoch - (86400 * i));
                */
        }
        //Plan to convert UNIX dates to display

        //List of locations: LATITUDE,LONGITUDE
        var locations = ["46.3494,-85.5083"]

        var currentAPIKey ="privateAPIKey"; //gets an APIkey from user from forecaster input.

 var listAPIs = "";

$.each(threeDayAPITimes, function(i, time) {
    var darkForecastAPI= "https://api.forecast.io/forecast/" + currentAPIKey + "/" + locations + "," + time;
    $.getJSON(darkForecastAPI, {
        tags: "WxAPI[" + i + "]",  //Is this tag the name of each JSON page? I tried to index it incase this is how to refer to the JSON formatted code from the APIs.
        tagmode: "any",
        format: "json"
    }, function(result) {
        // Process the result object
    });
    });
  //Process result in foreach loop   
         var eachPrecipSum = 0;
    if(result.currently.precipIntensity >=0 && result.currently.precipType == "rain")
        {
            $.each(result, function() {
              eachPrecipSum += (this.currently.precipIntensity);
              totalPrecipSinceDate += eachPrecipSum ;
        });

        }       
            alert(eachPrecipSum );

person safron6    schedule 01.05.2015    source источник
comment
что означает ask for the formatted code?   -  person charlietfl    schedule 01.05.2015
comment
listAPIs — это строка. Почему вы используете listAPIs.length в качестве ограничения цикла for? Это общее количество символов во всех объединенных URL-адресах. Кроме того, это должно быть length, а не Length.   -  person Barmar    schedule 01.05.2015
comment
Синтаксис вашего IIFE неверен. У вас есть лишний }); перед })();.   -  person Barmar    schedule 01.05.2015
comment
Я думаю об этом как о массиве, в котором хранится JSON, поэтому, если этот API возвращается как JSON, тогда он будет называться каким-то массивом, чтобы я мог получить, например, что-то вроде WxAPI[0].precipIntensity со страницы JSON, датированной задним числом. имя, затем добавьте эти значения в эти поля в другую переменную. Все это страницы JSON, просто нужно организовать их с помощью меток, которые компилятор сможет распознать.   -  person safron6    schedule 01.05.2015
comment
Я мог бы изменить часть этого на цикл foreach. Я думаю, что конкатенация с учетом долготы и широты будет иметь по крайней мере три запроса страниц API, генерируемых в каждом месте и из одного и того же APIKey.   -  person safron6    schedule 01.05.2015
comment
Каждый раз в первом цикле for вы переназначаете darkForecastAPI. Когда цикл завершится, переменная будет содержать последнее назначенное вами значение, а второй цикл продолжит отправку на этот URL-адрес.   -  person Barmar    schedule 01.05.2015
comment
Вы объединяете весь URL-адрес darkForecastAPI с listAPIs.   -  person Barmar    schedule 01.05.2015
comment
Кажется, вы должны просто объединить эти две петли for. Сначала вы устанавливаете darkForecastAPI, затем вызываете на нем $.getJSON. Кроме того, если вы хотите что-то сделать с JSON, вам нужна функция обратного вызова, которая его обрабатывает.   -  person Barmar    schedule 01.05.2015
comment
Верно, listAPI — это объект массива или список, который сохраняет уникальный экземпляр времени UNIX из цикла for().   -  person safron6    schedule 01.05.2015
comment
Есть идея, где искать руководство по функциям обратного вызова?   -  person safron6    schedule 01.05.2015
comment
Это просто следующий аргумент $.getJSON. Он получает проанализированный ответ JSON в качестве аргумента. Это объясняется в документации jQuery. Любое руководство по использованию AJAX с jQuery должно объяснять это.   -  person Barmar    schedule 01.05.2015
comment
listAPIs не является объектом массива или списком. Это строка: var listObj = "".   -  person Barmar    schedule 01.05.2015
comment
Таким образом, вызовите каждый $.getJSON сразу в одном и том же цикле.   -  person safron6    schedule 01.05.2015
comment
Что означает double[] threeDayAPITimes = new double[3];? Это не Javascript, похоже, это Java.   -  person Barmar    schedule 01.05.2015
comment
поэтому откажитесь от цикла listAPIs for(), чтобы все произошло сразу, и поместите darkForecastAPI в запрос $.getJSON.   -  person safron6    schedule 01.05.2015
comment
Это C#, эта часть корректно работает в Visual Studio. Проверил работоспособность кода. Он возвращает три времени UNIX для ввода URL-адреса запроса API.   -  person safron6    schedule 01.05.2015


Ответы (1)


Ваш цикл должен быть примерно таким:

$.each(threeDayAPITimes, function(i, time) {
    var darkForecastAPI= "https://api.forecast.io/forecast/" + currentAPIKey + "/" + locations + "," + time;
    $.getJSON(darkForecastAPI, {
        tags: "WxAPI[" + i + "]",  //Is this tag the name of each JSON page? I tried to index it incase this is how to refer to the JSON formatted code from the APIs.
        tagmode: "any",
        format: "json"
    }, function(result) {
        // Process the result object
    });
}
person Barmar    schedule 01.05.2015
comment
должен ли объект результата обрабатываться в аналогичной области? Поскольку каждый результат представляет собой страницу JSON, можно ли сформировать индекс или просто обработать все сразу и найти по результату precipIntensity? - person safron6; 01.05.2015
comment
Я нашел решение после вашей критики. Хм. stackoverflow.com/questions/30091533/ - person safron6; 08.05.2015