Opcje widżetu i problem z json_decode przy poprawnej strukturze JSON

Opisywany problem przytrafił mi się już kilka razy i za każdym razem straciłem dobre pół godziny zanim sobie przypomniałem co robiłem źle. Dlatego w ramach utrwalenia sobie w pamięci tworzę ten wpis 😉

Otóż czasami zdarza się, że chcemy w jednej z opcji widżetu/wtyczki przechować dane JSON. Cały problem zaczyna się gdy zechcemy te dane ponownie przetworzyć np. we front-endzie – otóż zapewne wykorzystamy dostępną od PHP 5.2 funkcję json_decode. Najpewniej okaże się, że funkcja ta zwróci pusty rezultat, gdyż uzna nasze dane JSON za niezgodne z tym formatem (co można sprawdzić po wyniku działania funkcji json_last_error).

Oczywiście pierwszy odruch to skopiowanie danych JSON do validatora – wynik walidacji często będzie pozytywny. I w tym momencie zagwozdka robi się trudna. Trudna do momentu gdy sobie przypomnimy, że WordPress przy zapisie opcji zamienia niektóre niebezpieczne znaki na encje, zatem najpewniej uratuje nas zapis:

str_replace('"', '"', $nasze_dane_JSON);

przed wrzuceniem naszych danych do json_decode. Niby sprawa trywialna, ale w zasadzie zawsze dochodziłem do etapu gdy widziałem pozytywny wynik walidacji danych JSON i miałem najróżniejsze podejrzenia. Swoją drogą gdyby powyższa metoda nie pomogła, trzeba szukać dalej – np. wyrzucić wszystkie zbędne białe znaki (np. wyrażeniem regularnym /\s+/) lub sprawdzić czy przypadkiem do naszych danych JSON nie dostały się jakieś dziwne znaki z zestawu znaków Unicode, które widoczne są dopiero w edytorze heksadecymalnym. Mi na szczęście póki co wystarczała zawsze wspomniana linijka kodu.

I mam też nadzieję, że następnym razem w takiej sytuacji będę pamiętał o wspomnianej linijce kodu rozwiązującej większość problemów 😉