Мммм... Мисля, че това е правилното начин всъщност. \u00df е правилно Unicode представяне на ß . Когато json_decode() обратно, той ще стане ß отново.
Къде ви създава проблеми? Приемащият край не го декодира правилно? Би трябвало, ако използвате стандартен json_* функции.
Всички примери в ръководството показват същото нещо - знаците извън обхвата на ASCII се превръщат в числови поредици.