j obe
j obe

Reputation: 2049

Why is serialisation necessary for sending data?

I've been reading up on JSON and serialization, from what I understand JSON is a format often used for transferring data over a network e.g. from/to a web server or storing the data to disk.

The data could be strings, numbers, objects etc. I haven't found a clear explanation for why the serialization is needed, for instance when sending a string to a web server or saving it to disk, isn't the string already stored as a series of bits and bytes by the computer, isn't this the most basic form for the data? so why can't these be sent/stored as they are?

Why does it need to be stringified into JSON i.e. serialised, which turns it into a string?

To be clear, I'm asking why it's needed and a simple clear explanation for that.

Thanks

Upvotes: 3

Views: 564

Answers (3)

Joachim Sauer
Joachim Sauer

Reputation: 308149

Broadly speaking serialization does two important, mostly independent jobs:

  1. collects all the information into a single "chunk" (stream) of data that's self-contained and
  2. turns all the information into an agreed-on format (usually optimized for either compactness or ease of parsing)

#1 is important because a single object with many properties and sub-object can be spread all over the memory of a running program.

For example a JavaScript runtime could have a dedicated memory pool for strings constants. Then an object that uses some constant as a key would just reference into that pool from its data structure. That means that the object is no longer in a single self-contained block in memory: it's spread out over multiple areas. This kind of spreading-out is actually the norm: objects don't usually contain complex data directly and depending on the language even "primitive" values such as number could be stored as references to another place in memory.

#2 is important mostly because the format used to quickly access data in-memory might not be suitable to transfer (because it might contain unnecessary redundancy or memory pointers that don't make any sense when transferred to another computer, which partially ties to reason #1).

An example of that would be a map (or dictionary): the in-memory representation will usually involve multiple buckets that hold hashed-values and some kind of collision-handling structure inside those buckets (a linked list or a tree, for example). That structure helps with efficient access to separate keys, but transferring that structure directly over the wire is pointless: it's very easy to re-build and there's no guarantee that the receiving end uses the exact same way to represent a map. So instead we just send each key and the associated value and let the receiving end deal with re-constructing any data structures it needs for efficient access.

Upvotes: 2

UncleCid
UncleCid

Reputation: 1

Not everyone knows how to parse or interpret those series of bits. Sometimes you need some general structure, some format, that can be passed around so that other people understand what it is you're trying to tell them.

Upvotes: 0

mkrieger1
mkrieger1

Reputation: 23250

The simple reason is that data can be stored differently in memory on different computers, or even by programs on the same computer written in different programming languages.

Serialization formats like JSON provide a defined way for exchanging data between computers or programs.

Upvotes: 1

Related Questions