Jak odczytać dane z JSON by zapisać je w bazie??

0

Witam serdecznie mam takie pytanie... mianowicie chciałem sobie zrobić program w python do pobierania danych ze strony Zevercloud... bo herbatniki jakiś rok temu skasowali API.
Wszystko ładnie mi pobiera ale jako, że jestem amatorem w Python mam pytanie jak sformatować dane z JSON aby można było je zapisać do bazy danych.



import json
import requests

with requests.Session() as s:
    r1 = s.post(
        'https://www.zevercloud.com/login',
        data=dict(username='login', password='pass'),
    )
    r2 = s.get('https://www.zevercloud.com/data/energy/amountm/2021-01?id=997').json()
    json_str = (json.dumps(r2, indent=4))
    print (json_str)

I dostaję odpowiedź

[
    {
        "sid": 62923,
        "byname": "Generation",
        "isno": null,
        "unit": "kWh",
        "dataset": [
            {
                "consump": 0.0,
                "mexport": 0.0,
                "time": "2021-01-01",
                "mimport": 0.0,
                "value": [
                    "22.2"
                ],
                "net": 0.0
            },
            {
                "consump": 0.0,
                "mexport": 0.0,
                "time": "2021-01-02",
                "mimport": 0.0,
                "value": [
                    "1.8"
                ],
                "net": 10.0
            },
            {
                "consump": 0.0,
                "mexport": 0.0,
                "time": "2021-01-03",
                "mimport": 0.0,
                "value": [
                    "22.4"
                ],
                "net": 0.0
            },
            {
                "consump": 0.0,
                "mexport": 0.0,
                "time": "2021-01-04",
                "mimport": 0.0,
                "value": [
                    "14.3"
                ],
                "net": 0.0
            },
.... i tak cały miesiąc

I teraz insertują mnie tylko dwie wartości
"time"
"value"

Czy ktoś mi pomoże jak to zapisać do zmiennej bym mógł potem w pętli zapisywać każdy dzień z wartością do bazy danych ??
Zapis do bazy danych mam ogarnięty ale przy tym kurde poległem...

Z góry dziękuje za pomoc

1

Ty chcesz całego jsona do bazy wrzucić czy poszczególne pola w oddzielne kolumny?

0

Poszczególne pola w oddzielne kolumny:
Czyli w bazie chcę mieć taki układ:

Data Produkcja
2021-01-01 22.2
2021-01-02 1.8
2021-01-03 22.4
2

https://realpython.com/python-json/ - paragraf o deserializacji a potem połączyć się z baza (jakiej tam używasz) i zrobić inserty z tymi danymi co dostaniesz z desrializacji.

0

Nie kumam tego...

json_string= (json.dumps(r2, indent=4))
data = json.loads(json_string)
    for element in data[0]:
        print(element['time'])
        print(element['value'])
0

Czego nie kumasz ? Load odwzorowuje struktury Jasona przy pomocy struktur pythonowych.

0

@UglyMan: Dal CI praktycznie gotowca.

json_string = """
{
    "researcher": {
        "name": "Ford Prefect",
        "species": "Betelgeusian",
        "relatives": [
            {
                "name": "Zaphod Beeblebrox",
                "species": "Betelgeusian"
            }
        ]
    }
}
"""
data = json.loads(json_string) 

data["resercher"]["name"]
data["resercher"]["species"]

<< Ford Prefect
<< Betelgeusian

INSERT INTO table (col1, col2) VALUES (data["resercher"][x], data["resercher"][y]) itp
0

@ledi12: Widocznie jestem zbyt tępy na to...

import json
import requests

with requests.Session() as s:
        r1 = s.post(
            'https://www.zevercloud.com/login',
            data=dict(username='[email protected]', password='Password123'),
        )
        r2 = s.get('https://www.zevercloud.com/data/energy/amountm/2021-01?sid=62923').json()
        json_string = (json.dumps(r2, indent=4))
        data = json.loads(json_string)
        
        for element in data:
           datav = (element["dataset"]["time"])
           print(datav)

I dostaję

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    element1 = (element["dataset"]["time"])
TypeError: list indices must be integers or slices, not str

Jak robię


        n = 0
        for element in data: 
           datav = (element["dataset"][n]["time"])
           value = (element["dataset"][n]["value"][0])
           print(datav)
           print(value)
           n= n + 1

To mam to co chcę ale tylko 1 rekord

2021-01-01
2.2

1

Dataset jest tablica i dlatego tak masz. Ty musisz iterować po tym co dostajesz z dataset

0

@UglyMan: Kurde jest! tyle walki ;) pewnie i tak źle ale działa jak chciałem ;) Dzięki bardzo i sorki za moją tępotę ale programistą to ja już nigdy nie zostanę prędzej mi na tamten świat przyjdzie przejść niż to wszystko ogarnąć ;)


        for element in data: 
           k = len(element["dataset"]) 
           for i in range (0,k):
               datav = (element["dataset"][i]["time"])
               value = (element["dataset"][i]["value"][0])
               print(datav)
               print(value)
               i= i + 1

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