Why use JSON.serialize in @RemoteAction return statement

I can’t figure out why in an @RemoteAction method you would want to JSON.serialize the object being returned? I see this in a lot of code and I’m trying to understand the reasoning. I thought @RemoteAction automatically serialized it for you. In fact when doing this it appears you must decode using htmlDecode since it’s double encoded, once by Javascript Remoting and again by JSON.serialize method.

Is there any function to deserialize an JSON to an array in lightning component?

I have been using JSON.parse() function to deserialize JSON object, It is not working for special characters.
For example, if the JSON contains a date it being converted as 2012/04/18 instead of 2012/04/18.
As per the info in this site https://success.salesforce.com/issues_view?id=a1p30000000wkAIAAY there is a function $A.util.json.encode() to serialize. I’m searching for function to deserialize a JSON in controllerJS.