W jaki sposób dostać się do wybranego obiektu w JSON (niestandardowe)

0

Mam taki json:
img

do którego dostałam się w następujący sposób:

` const api_url = '/weather';

    async function getData() {
      const response = await fetch(api_url);
      const data = await response.json();
      console.log(data.weather);
    }`

I teraz nie wiem jak dalej,dostać się do potrzebnych danych.

W tablicy [0...99] są rekordy od 1 do 100] czyli 1 - Krakow , Temp , Smog itp itd, 2 Warszawa 3, Łódź itp itd
Ale kompletnie nie mogę sobie z tym poradzić w jaki sposób mam to wyświelić w konsoli a później móc przerobić te dane już w kodzie..

próbowałam console.log(data.weather[0]); albo console.log(data.weather.1);

2

Co zwróciło Ci console.log(data.weather[0]);?

0
Patryk27 napisał(a):

Co zwróciło Ci console.log(data.weather[0]);?

godzina zabawy a tutaj pomoc w 10 sekund , wow , dzięki !

Zwrociło mi te dane tak jak chciałam czyli w formie
City: "Cracow"
Country: "Poland"
Temp: "16 C"

To teraz pytanie czy znowu dalej będę główkowała 2 dni zanim ogarnę w jaki sposób wyświetlić tylko te tablice gdzie TEMP: 16C ?

czyli chce w konsoli wyswietlić tylko te recordy z miastami z taką temperaturą ?

Dzięki za pomoc. !

1

godzina zabawy a tutaj pomoc w 10 sekund , wow , dzięki !

Napisałaś, że już to próbowałaś:

próbowałam console.log(data.weather[0]);

... stąd zapytałem z czystej ciekawości :-P

w jaki sposób wyświetlić tylko te tablice gdzie TEMP: 16C ?

js array filter w Google.

0
Patryk27 napisał(a):

godzina zabawy a tutaj pomoc w 10 sekund , wow , dzięki !

Napisałaś, że już to próbowałaś:

próbowałam console.log(data.weather[0]);

... stąd zapytałem z czystej ciekawości :-P

w jaki sposób wyświetlić tylko te tablice gdzie TEMP: 16C ?

js array filter w Google.

ok dzięki pomogło.

a teraz chce wykonywać obliczenia na tych danych to znaczy sumować dla różnych miast , obliczac srednie miesieczne itp.
Jak mam do tego podejsc ? czy potrzebuje bazy danych czy tez moge to zrobić bez bazy ? Póki co interesują mnie raczej proste kalkulacje i wyliczenia i szukam optymalnej metody ale także prostej dla początkującego

1

teraz chce wykonywać obliczenia na tych danych to znaczy sumować dla różnych miast , obliczac srednie miesieczne itp.

W takim razie js array tutorial, js tutorial etc. w Google.

czy potrzebuje bazy danych czy tez moge to zrobić bez bazy ?

O ile nie potrzebujesz tych danych gdzieś zapisywać, nie widzę powodu do wykorzystywania bazy danych.

0
Patryk27 napisał(a):

teraz chce wykonywać obliczenia na tych danych to znaczy sumować dla różnych miast , obliczac srednie miesieczne itp.

W takim razie js array tutorial, js tutorial etc. w Google.

czy potrzebuje bazy danych czy tez moge to zrobić bez bazy ?

O ile nie potrzebujesz tych danych gdzieś zapisywać, nie widzę powodu do wykorzystywania bazy danych.

nie no chce zapisać ponieważ chce mieć dostęp do danych historycznych, np srednia z poprzedniego tygodani. Patanie czy to wszystko nie moze być zapisywane w JSON w formie API czy takie coś jest niepratyczne zupełnie ?

1

chce zapisać

W takim razie potrzebujesz bazę danych (w dowolnej formie), simple as that.

czy to wszystko nie moze być zapisywane w JSON w formie API

Niestety nie rozumiem co masz na myśli.

0
Patryk27 napisał(a):

chce zapisać

W takim razie potrzebujesz bazę danych (w dowolnej formie), simple as that.

czy to wszystko nie moze być zapisywane w JSON w formie API

Niestety nie rozumiem co masz na myśli.

Mam dany endpoint i tam np codziennie wysyłam obliczenia dla danego miast i srednią ze wszystkich miast itp
I w ten sposób codziennie json powiększa się o nowe dane czyli np;

miasto1-15-04-2020 : Temp (np oblicznona średnia dobowa z całego dnia)
miasto2-15-04-2020 : Temp

A pózniej kolejne w tym samym pliku Json czyli
miasto1-16-04-2020 : Temp
miasto2-16-04-2020 : Temp
miasto1-17-04-2020 : Temp
miasto2-17-04-2020 : Temp

it tak systematyczne zapisywanie dane które można miec później w formie API. Czy takie coś może zastąpić baze danych i czy tak w ogóle się postepuje i czy to praktyczne a być może tylko komplikuje sprawę?

1

Czy takie coś może zastąpić baze danych

Taki endpoint byłby bazą danych.

Termin "baza" nie oznacza ani konkretnie MySQL, ani konkretnie MongoDB - baza danych to dowolna aplikacja pozwalająca na zapis oraz odczyt danych, z wykorzystaniem dowolnego protokołu komunikacyjnego.

Odchodząc jednak od samej semantyki: skąd miałabyś wziąć ten endpoint? :-)

0
Patryk27 napisał(a):

Czy takie coś może zastąpić baze danych

Taki endpoint byłby bazą danych.

Termin "baza" nie oznacza ani konkretnie MySQL, ani konkretnie MongoDB - baza danych to dowolna aplikacja pozwalająca na zapis oraz odczyt danych, z wykorzystaniem dowolnego protokołu komunikacyjnego.

Odchodząc jednak od samej semantyki: skąd miałabyś wziąć ten endpoint? :-)

hmn no nie wiem, Myślałam że mi powiesz

1

O ile Cię dobrze rozumiem, musiałabyś go zwyczajnie napisać - np. w Node, PHPie, Pythonie czy Go.

Pod spodem będziesz mogła sobie wykorzystywać pliki *.json, Postgresa albo cokolwiek, co jeszcze przyjdzie Ci na myśl :-)

Tak czy siak: szukaj informacji pod kątem node js how to write a server, python how to write a server etc. (którykolwiek język bardziej Ci przypada do gustu).

0

nie mogę sobie poradzić. Takie banały... title

Próbuje zmapować potrzebne informacje. I chyba nawet nie wiem jak przejśc przez tę pierwszą barierę czyli [1-100] [101-200] [201-300]
pod każdą z nich jest wartość:
[0]
czyli 0: {City: "Cracow", Temp: "23"}
[1]
[2]
[3]

function lipa() {
 return fetch(api_url)
  .then(res => res.json())
  .then(data=> {
const {
  City,
  Temp,
  ...myData
} = data
console.log(data)
console.log(solData)
return Object.entries(solData).map(([weather, data]) => {
  return {
    test: wtf,
    maxTemp: data.Temp,
    gowno: data.City,

  }
})
  })
}
1

nie wiem jak przejśc przez tę pierwszą barierę czyli [1-100] [101-200] [201-300]

To jest jedynie sposób wyświetlania tablicy przez przeglądarkę - w rzeczywistości masz tam zwyczajne tablica[0], tablica[1], ..., tablica[101], tablica[102], ..., tablica[300], bez żadnych ceregieli.

Podejdźmy do tego powoli - co zwraca Ci ten kod?

async function lipa() {
  const response = await fetch(api_url);
  const items = await response.json();

  console.log(items);
}
0
Patryk27 napisał(a):

nie wiem jak przejśc przez tę pierwszą barierę czyli [1-100] [101-200] [201-300]

To jest jedynie sposób wyświetlania tablicy przez przeglądarkę - w rzeczywistości masz tam zwyczajne tablica[0], tablica[1], ..., tablica[101], tablica[102], ..., tablica[300], bez żadnych ceregieli.

Podejdźmy do tego powoli - co zwraca Ci ten kod?

async function lipa() {
  const response = await fetch(api_url);
  const items = await response.json();

  console.log(items);
}

w zasadzie to nic:
title

0

No a te dwa komunikaty błędów wyżej?

0
Patryk27 napisał(a):

No a te dwa komunikaty błędów wyżej?

nie to raczej nie zwiazane
GET http://localhost:3000/index.js net::ERR_ABORTED 404 (Not Found)
favicon.ico:1 GET http://localhost:3000/favicon.ico 404 (Not Found)

0

W jaki sposób uruchamiasz tę funkcję lipa()?

0
Patryk27 napisał(a):

W jaki sposób uruchamiasz tę funkcję lipa()?

title

0

Oki, w takim razie tablica znajduje się w obiekcie weather i powinnaś być w stanie przeiterować się po niej w taki sposób :-)

async function lipa() {
  const response = await fetch(api_url);
  const responseBody = await response.json();

  responseBody.weather.forEach((weather) => {
    console.log(weather);
  });
}
0
Patryk27 napisał(a):

Oki, w takim razie tablica znajduje się w obiekcie weather i powinnaś być w stanie przeiterować się po niej w taki sposób :-)

async function lipa() {
  const response = await fetch(api_url);
  const responseBody = await response.json();

  responseBody.weather.forEach((weather) => {
    console.log(weather);
  });
}

no dobra ale jak chce zmapować na zasadzie takiej jak w pierwszym poście.

W kazdej sekcji mam niższe drabinki a chce zmapować tak aby były tylko najważniejsze informacje.

Czyli chce jedynie główne miasta. Dla temperatury : Temp i reszta mnie nie interesuje (np Temp w Kelwinach)
Dodatkowo Pod "gałęzią" Kraków mam kod pocztowy oraz ulicę i 10 innych tablic ale interesuje mnie jedynie kod pocztowy oraz ulica

0

Powoli, one step at a time :-)

Czyli chce jedynie główne miasta.

Czym są "główne miasta"?

0
Patryk27 napisał(a):

Powoli, one step at a time :-)

Czyli chce jedynie główne miasta.

Czym są "główne miasta"?

dobra to może być namieszane, tak podaje przykład od początku. Do tego kodu co podałeś:

przykładowo:

lipa();

async function lipa() {
  const response = await fetch(api_url);
  const responseBody = await response.json();

  responseBody.weather.forEach((weather) => {
    // console.log(weather.Descr);

then(weather => {
  const {
    Opis,
    Inne,
    ...to_mnie_interesuje
  } = moje
  console.log(moje)
})


  });
}

I to nie działa , błąd:

(index):40 Uncaught (in promise) ReferenceError: then is not defined
    at (index):40
    at Array.forEach (<anonymous>)
    at lipa ((index):37)

Jakie było zamiarzenie. W tablicy 0 mam Miasto 1 , Nazwa 1 , Temp 1 i dajmy na to Opis oraz Inne
Ten kod miał służyć aby wyświetlić dla każdego miasta tylko Opis oraz Inne

0

Dlaczego dodałaś tam then()?
Co ta funkcja robi?

0
Patryk27 napisał(a):

Dlaczego dodałaś tam then()?
Co ta funkcja robi?

ok racja then usunięte a nadal ten sam błąd
title

aktualnie tak to wygląda:

lipa();

async function lipa() {
  const response = await fetch(api_url);
  const responseBody = await response.json();

  responseBody.weather.forEach((weather) => {
    // console.log(weather.Descr);

  const {
    Descr,
    Comp,
    ...to_mnie_interesuje
  } = moje
  console.log(moje)



})
}
0

Czym jest zmienna moje?

0
Patryk27 napisał(a):

Czym jest zmienna moje?

no jak czym , chce aby była nową tablicą z danymi Descr oraz Comp / Temp oraz Inne

2

@Malwinka: W tej funkcji lipa (BTW. staraj się by nazwy funkcji były czasownikami) obiekt responseBody nie jest obietnicą tylko jej wynikiem. Możesz na nim operować bezpośrednio. Then to nie funkcja, ale metoda operująca na obiekcie obietnicy i jeżeli piszesz konsekwentnie w notacji async/await jej użycie jest zbędne.

0

chce aby była nową tablicą z danymi Descr oraz Comp / Temp oraz Inne

Przecież już masz te dane w zmiennej weather - dlaczego chcesz je przenieść do zmiennej moja?

Btw, tablica != obiekt.

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