JSON'da seriyi kaldırma ve serileştirme nedir?


Yanıtlar:


229

JSON, bir dizedeki nesneleri kodlayan bir formattır. Serileştirme , bir nesneyi bu dizeye dönüştürmek anlamına gelir ve serileştirme, ters işlemidir (dizeyi dönüştür -> nesneyi) .

Veri iletirken veya bir dosyada depolarken, verilerin bayt dizeleri olması gerekir, ancak karmaşık nesneler nadiren bu formattadır. Serileştirme, bu tür bir kullanım için bu karmaşık nesneleri bayt dizelerine dönüştürebilir. Bayt dizgileri iletildikten sonra, alıcının orijinal nesneyi bayt dizesinden kurtarması gerekecektir. Bu, seriyi kaldırma olarak bilinir.

Diyelim ki bir nesneniz var:

{foo: [1, 4, 7, 10], bar: "baz"}

JSON'a serileştirmek, onu bir dizeye dönüştürecektir:

'{"foo":[1,4,7,10],"bar":"baz"}'

saklanabilir veya herhangi bir yere tel ile gönderilebilir. Alıcı daha sonra orijinal nesneyi geri almak için bu dizeyi seri halinden çıkarabilir. {foo: [1, 4, 7, 10], bar: "baz"}.


3
@kennytm - Tel üzerinden bir şeyler göndermeye kafamı sarmaya çalışıyorum. İkili kodlama veya json, xml veya proto buf kullanıp kullanmadığımdan bağımsız olarak, verilerin kablo üzerinden gönderilmeden önce her zaman bayt cinsinden olması gerekir. Bu doğru mu?
Nirmal

1
@Nirmal Evet. ___
kennytm

1
Farkı hatırlamak için kullandığım anımsatıcı bir cihaz, "Serileştirmenin nesneleri seri numaralarına dönüştürmesidir"
Janac Meena

1
Öyleyse neden biz sadece"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet

2
@EnricoMariaDeAngelis JSON Özellikleri tırnak içinde olmalıdır. Bu bir zorunluluktur - wikideki
Bulut

8

Veri depolama bağlamında, serileştirme (veya serileştirme), veri yapılarını veya nesne durumunu saklanabilen (örneğin, bir dosya veya bellek tamponunda) veya iletilebilen (örneğin, bir ağ bağlantısı üzerinden) bir formata çevirme işlemidir. bağlantı) ve daha sonra yeniden yapılandırıldı. [...]
tersi işlemi, bir dizi bayt bir veri yapısını çıkararak bir seri kaldırma . Wikipedia'dan

Python'da "serileştirme", verilen veri yapısını (örneğin a dict) geçerli JSON kolye (nesne) haline dönüştürmekten başka bir şey yapmaz .

  • Python'un TrueJSONs dönüştürülecek trueve sözlük kendisi daha sonra tırnak içinde kapsüllü edilecektir.
  • Bir Python sözlüğü ile JSON arasındaki farkı Boole değerlerine göre kolayca tespit edebilirsiniz:
    • Python : True/ False,
    • JSON : true/false
  • Python yerleşik modülü json, serileştirme yapmanın standart yoludur:

Kod örneği:

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian",
        "male": True,
    }
}

import json
json_data = json.dumps(data, indent=2) # serialize
restored_data = json.loads(json_data) # deserialize

# serialized json_data now looks like:
# {
#   "president": {
#     "name": "Zaphod Beeblebrox",
#     "species": "Betelgeusian",
#     "male": true
#   }
# }

Kaynak: realpython.com


-3

Python Kullanarak Seri Hale Getirme ve Seriyi Kaldırma Açıklaması

Python'da, turşu modülü serileştirme için kullanılmaktadır. Bu yüzden, serileştirme sürecine Python'da asitleme denir . Bu modül Python standart kitaplığında mevcuttur .

Turşu kullanarak serileştirme

import pickle

#the object to serialize
example_dic={1:"6",2:"2",3:"f"}

#where the bytes after serializing end up at, wb stands for write byte
pickle_out=open("dict.pickle","wb")
#Time to dump
pickle.dump(example_dic,pickle_out)
#whatever you open, you must close
pickle_out.close()

PICKLE dosyası (not defteri gibi bir metin düzenleyici tarafından açılabilir) şunları içerir (serileştirilmiş veriler):

€} q (KX 6qKX 2qKX fqu.

Turşu kullanarak seriyi kaldırma

import pickle

pickle_in=open("dict.pickle","rb")
get_deserialized_data_back=pickle.load(pickle_in)

print(get_deserialized_data_back)

Çıktı:

{1: "6", 2: "2", 3: "f"}


4
Kullanıcı, JSON'un turşu olmadığını sordu. Bu biraz konu dışı.
smci

Bu orijinal sorudur: JSON'da seriyi kaldırma ve serileştirme nedir? Fikri göstermek için Python'un turşu modülünü kullandım. Bir fikri açıklamak için bir araç kullandım. Fikirden çok araca odaklanıyorsunuz.
Asif
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.