2015-04-27 3 views
2

Я работаю с .json файлами и у меня есть следующие функции:Невозможно использовать объект типа StdClass как массив - JSON

//Rights array (WRITE, CREATE, DELETE, ADDUSERS, DELETE USERS) 
function addUser($requester, $username, $rights) { 
    $file = $requester->getFolder() . "Projects/" . $this->name . "/Data/users.json"; 
    $json = json_decode(file_get_contents($file, false)); 
    $json[$username] = array("write" => $rights[0], "create" => $rights[1], "delete" => $rights[2], "adduser" => $rights[3], "deleteuser" => $rights[4]); 
    file_put_contents($file, json_encode($json)); 
} 

Всякий раз, когда я запускаю код, который использует эту функцию, я получаю следующее сообщение об ошибке :

Fatal error: Cannot use object of type stdClass as array in...

+0

Было бы неплохо показать нам всю ошибку с содержанием линии. – Michas

ответ

2

Второй параметр json_decode по умолчанию для ложной, то есть он будет производить объект. Используйте true для создания массива.

Ошибка исходит от $json[$username], где вы видите $ json как массив. Когда это объект, вы получите доступ к нему как: $json->$username.

+0

Я думал, что все наоборот ... Я должен был проверить: P Спасибо, человек! –

+0

Добро пожаловать. – Devon

+0

Я все еще получаю ошибку. Я сохранил все одно и то же, кроме: '$ json = json_decode (file_get_contents ($ file, true)); И ошибка в этой строке (39): '$ json [$ username] = array ("write" => $ rights [0], "create" => $ rights [1], "delete" => $ rights [2], «adduser» => $ rights [3], «deleteuser» => $ rights [4]); –

Смежные вопросы