Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to serialize an array and deserialize back

How do I serialize an array and deserialize it back from a string? I tried the following code, but it doesn't really return the original array of integers but does for the array of strings.

 x = [1,2,3].join(',') # maybe this is not the correct way to serialize to string?
 => '1,2,3'

 x = x.split(',')
 => [ '1', '2', '3' ]

Is there a way to get it back to integers without having the .collect{ |x| x.to_i }?

like image 305
Kokizzu Avatar asked Mar 17 '13 11:03

Kokizzu


People also ask

How do you serialize an array?

Serialize() converts an array, given as its only parameter, into a normal string that you can save in a file, pass in a URL, etc. Unserialize() is the opposite of serialize() - it takes a serialize()d string and converts it back to an array.

How do you serialize and deserialize?

For serializing the object, we call the writeObject() method of ObjectOutputStream class, and for deserialization we call the readObject() method of ObjectInputStream class. We must have to implement the Serializable interface for serializing the object.

How do you serialize an array in Java?

Serializing ArrayList: In Java, the ArrayList class implements a Serializable interface by default i.e., ArrayList is by default serialized. We can just use the ObjectOutputStream directly to serialize it.


2 Answers

The standard way is with Marshal:

x = Marshal.dump([1, 2, 3])
#=> "\x04\b[\bi\x06i\ai\b"

Marshal.load(x)
#=> [1, 2, 3]

But you can also do it with JSON:

require 'json'

x = [1, 2, 3].to_json
#=> "[1,2,3]"

JSON::parse(x)
#=> [1, 2, 3]

Or YAML:

require 'yaml'

x = [1, 2, 3].to_yaml
#=> "---\n- 1\n- 2\n- 3\n"

YAML.load(x)
#=> [1, 2, 3]
like image 197
Guilherme Bernal Avatar answered Oct 23 '22 10:10

Guilherme Bernal


Split is just a tool for chopping up strings - it doesn't know where that string came from.

There are many ways of serialising data: YAML, JSON and Marshal being three that are part of the Ruby Standard Library. All distinguish between strings, integers and so on.

There are pros and cons for each. For example, loading Marshal data from an untrusted source is dangerous and Marshal isn't good if you need to exchange the data with non-Ruby code. JSON is usually a good allrounder.

like image 3
Frederick Cheung Avatar answered Oct 23 '22 10:10

Frederick Cheung