Okay, so it seems you already knew this:
By default, json_decode will return a stdClass object. If you want an array, use:
json_decode($jsondata, true);
See: http://php.net/manual/en/function.json-decode.php
So, to answer "Why":
JSON is a format used to store hierachical datasets, much like how XML might have been used in the past. Because however Javascript is optimized for accessing object properties, no additional libraries need be present to work with JSON structures - they are actual objects in Javascript.
It is easier to parse JSON than XML, and relatively easy to translate into objects and/or arrays in back-end languages. In many languages outside of PHP, there is something called a Dictionary, or Hashtable, which is usually an object with key/value pairs.
PHP does not differentiate arrays and "associative arrays" other than contextually, so for a PHP developer it's natural to expect the result to be an associative array, and that option exists, but most likely for flexibility (and maybe because it decodes more naturally to the object) the object format exists.
I hope that explains. I also strongly recommend reading further on what JSON is (and is not) here:
http://json.org