Pobranie danych z obiektu

0

Cześć,
próbuje pobrać dane z o kursach walutowych ale mam problem z dobraniem się do daty. Poniżej prawie taki sam przykład gdzie wszystko działa ok. Wystarczy wkleić link aby zobaczyć dane.
Tu poprawny kod do pobrania danych o: id, mag, title, lon. lat. (jest to fragment connectora wykorzystywanego w Tableau).

$.getJSON("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson", function(resp) {
            var feat = resp.features,
            var feat = resp.features,
                tableData = [];

            // Iterate over the JSON object
            for (var i = 0, len = feat.length; i < len; i++) {
                tableData.push({
                    "id": feat[i].id,
                    "mag": feat[i].properties.mag,
                    "title": feat[i].properties.title,
                    "lon": feat[i].geometry.coordinates[0],
                    "lat": feat[i].geometry.coordinates[1]
                });

Chcę pobrać dane o walutach https://api.exchangeratesapi.io/history?start_at=2020-11-01&end_at=2029-09-01&symbols=PLN,USD,GBP, w sumie wydaje się to nawet prostsze ale mam problem z datą. Wyżej dane obiekty są numerowane od 0 wzwyż. A przy walutach od wybranej daty. W w/w kodzie odpowiada za to feat[i].
A jak to zastąpić aby wskazać ścieżkę dostępu do PLN, USD, GBP?

1

@muad:

fetch('https://api.exchangeratesapi.io/history?start_at=2020-11-01&end_at=2029-09-01&symbols=PLN,USD,GBP')
	.then(res => res.json())
	.then(json => {
		for (let i in json.rates) {
  		  console.log(json.rates[i])
  	    }
	})

I zwraca dla każdego dnia.

{
  GBP: 0.88935,
  PLN: 4.4873,
  USD: 1.1766
}
0

Dzięki za wskazanie. Ale to nie zadziała w tym łączniku (przykładowe mam tu, np. kurs.js - https://github.com/muad77/Covid_IT).

Tu pewnie chodzi o tą pętle: for (var i = 0, len = feat.length; i < len; i++), to "i" wskazuje kolejne obiekty, ale w danych z kursami zamiast numeracji kolejnych obiektów są kolejne daty. Jak to przerobić aby brało kolejne daty?

0

@muad: No, a to, co wkleiłem, to po czym iteruje jak nie po datach?

0

Spróbuje to rozwiązanie zastosować, a jak zrobić aby wraz z obiektem z danego dania zwracał też datę?

0

Zadeklaruj daty jako zmienne, ich widoczność będzie dostępna w miejscu gdzie budujesz odpowiedź. Zwróć rates i daty.

0

Mógłbyś pokazać jak to dokładnie zadeklarować aby zwracało? Ja js uczyłem się od sierpnia i to tylko w tym zakresie aby mieć rozeznanie i potrafić zrobić taki prosty connector ale jak coś wykracza poza schemat to mam problem.

1

https://jsfiddle.net/dfp015eo/

Zmienna i w pętli zwraca datę.

0

Dzięki bardzo.

0

Z wartościami poradziłem sobie ale wciąż mam problem z datą, w czystym kodzie (kluczowy fragment poniżej) działa to bez problemu ale problem mam w łączniku. (Wartości walut i walutę bazową wrzuca mi do tabeli prawidłowo - załącznik.) Trzeba najpierw zdefiniować kolumny (id w tym wypadku musi mieć taką samą nazwę jak w danych .json). No i chyba tu jest problem z datą. Data w źródle ma od razu daną wartość w przeciwieństwie do pozostałych danych gdzie najpierw jest nazwa np. PLN: 4,6012, do której można się odnieść. I chyba problem występuje w momencie definiowania tej kolumny dla daty. Z góry dziękuje za pomoc.

       {
           id: "GBP",
           alias: "GBP",
           dataType: tableau.dataTypeEnum.float
       },{
           id: "base",
           alias: "base",
           dataType: tableau.dataTypeEnum.string
       },{
           id: "date",
           alias: "date",
           dataType: tableau.dataTypeEnum.date
       },
       ];
           var tableSchema = {
           id: "Waluty",
           alias: "Waluty",
           columns: cols
       };
       schemaCallback([tableSchema]);
   };

   myConnector.getData = function(table, doneCallback) {
       $.getJSON("https://api.exchangeratesapi.io/history?start_at=2020-11-01&end_at=2029-09-01&symbols=PLN,USD,GBP", function(resp) {
        
           let data = resp.rates;           

                tableData = [];

                       for (let i in data) {

               tableData.push({
                  PLN: resp.rates[i]['PLN'],
                  USD: resp.rates[i]['USD'],
                  GBP: resp.rates[i]['GBP'],                 
                  base: resp['base'], 
                  date: resp.rates["date"],       
             });            
           }
```![pulp.JPG](https://4programmers.net/assets/33322/9Mkjo0M6QS8tVuiRB9A1UpeRb4cEmUrnq8f3YoiH.jpeg)
0

Zapomniałem wcześniej napisać, że problem był banalny zamiast: date: resp.rates["date"], czy date: resp.rates["i"], wystarczyło:
**date: i, ** (tak jak to kolega szafran98 napisał).
Wcześniej patrzyłem się na układ tych obiektów i aby dobrać się do daty to wypisywałem (wg mnie logicznie) poszczególne elementy nadrzędne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1