Skladování dat

JSON

JavaScript Object Notation (JSON) je datový formát určený pro přenos dat. Vstupem je libovolná datová struktura (číslo, řetězec, boolean, objekt nebo z nich složené pole), výstupem je vždy řetězec. JSON objekt může být teoreticky libovolně složitý (do šířky i hloubky).

Pro práci s tímto formátem je v Pythonu připravena knihovna json. Tato knihovna je schopna převést Pythonní objekt (složený z různých běžných proměných a kontejnerů) na řetězec, který představuje validní JSON Následně tato knihovna dokáže z JSON složit Pythonní objekt. Následuje příklad jak složit ukázkový Pythonní objekt do JSON textu.


In [4]:
import json

# ukazkova data
message = [
    {"time": 123, "value": 5},
    {"time": 124, "value": 6},
    {"status": "ok", "finish": [True, False, False]}, 
]

# zabalit zpravu
js_message = json.dumps(message)

# show result
print(type(js_message))
print(js_message)


<type 'str'>
[{"value": 5, "time": 123}, {"value": 6, "time": 124}, {"status": "ok", "finish": [true, false, false]}]

Následuje příklad, ve kterém se vezme JSON text z předchozího příkladu a zpátku se z něj složí objekt.


In [2]:
# unpack message
message = json.loads(js_message)

# show result
print(type(message))
print(message)


<type 'list'>
[{u'value': 5, u'time': 123}, {u'value': 6, u'time': 124}, {u'status': u'ok', u'finish': [True, False, False]}]

Ve formátu json můžou být libovolně mezery a nové řádky. Z toho plyne že je možné naformátovat JSON tak, aby byl lépe čitelný. Příklad následuje na předchozích datech.


In [5]:
# zabalit zpravu
js_message = json.dumps(message, indent=4)

# show result
print(type(js_message))
print(js_message)


<type 'str'>
[
    {
        "value": 5, 
        "time": 123
    }, 
    {
        "value": 6, 
        "time": 124
    }, 
    {
        "status": "ok", 
        "finish": [
            true, 
            false, 
            false
        ]
    }
]

Pickle

Pickle je ryze Pythonní knihovna, která slouží k snadnému ukládání Pythonních objektů. Následuje příklad, v kterém jsou ukázková data serializována pomocí knihovny pickle do soubor save.ph.


In [7]:
import pickle

# ukazkova data
message = [
    {"time": 123, "value": 5},
    {"time": 124, "value": 6},
    {"status": "ok", "finish": [True, False, False]}, 
]

# serizalizace pomoci pickle
pickle.dump(message, open( "save.p", "wb" ))

Následuje příklad kde jsou uložená data deserializována zpátky do Pythonního objektu.


In [9]:
# otevrit soubor pomoci pickle
loaded_message =  pickle.load(open( "save.p", "rb" ))

# tisk dat
print(type(loaded_message))
print(loaded_message)


<type 'list'>
[{'value': 5, 'time': 123}, {'value': 6, 'time': 124}, {'status': 'ok', 'finish': [True, False, False]}]

In [ ]: