JSON can be decoded to PHP arrays by using the $associative = true option. Be wary that associative arrays in PHP can be a "list" or "object" when converted to/from JSON, depending on the keys (of absence of them). 
You would expect that recoding and re-encoding will always yield the same JSON string, but take this example:
    $json = '{"0": "No", "1": "Yes"}';
    $array = json_decode($json, true);  // decode as associative hash
    print json_encode($array) . PHP_EOL;
This will output a different JSON string than the original:
    ["No","Yes"]
The object has turned into an array!
Similarly, a array that doesn't have consecutive zero based numerical indexes, will be encoded to a JSON object instead of a list.
    $array = [
        'first',
        'second',
        'third',
    ];
    print json_encode($array) . PHP_EOL;
    // remove the second element
    unset($array[1]);
    print json_encode($array) . PHP_EOL;
The output will be:
    ["first","second","third"]
    {"0":"first","2":"third"}
The array has turned into an object! 
In other words, decoding/encoding to/from PHP arrays is not always symmetrical, or might not always return what you expect!
On the other hand, decoding/encoding from/to stdClass objects (the default) is always symmetrical. 
Arrays may be somewhat easier to work with/transform than objects. But especially if you need to decode, and re-encode json, it might be prudent to decode to objects and not arrays. 
If you want to enforce an array to encode to a JSON list (all array keys will be discarded), use:
    json_encode(array_values($array));
If you want to enforce an array to encode to a JSON object, use:
    json_encode((object)$array);
See also: https://www.php.net/manual/en/function.array-is-list.php