У вас ошибка на ошибке.
1) JSON должен быть в UTF-8. А вы пишете, что данные принимаются (откуда принимаются?) не в Unicode, а в восьмибитной win 1251. Так быть не должно.
2) Вы верите содержимому заголовка, где написано win 1251, но это ложь, потому что эта кодировка - кириллическая, она не может передавать символы
š и
ų - убедитесь лично:
https://en.wikipedia.org/wiki/Windows-1251
3) Потому что (2), код
iconv('cp1251', 'utf-8', $json)
не имеет смысла. Если ваш JSON действительно передается в восьмибитной кодировке (что само по себе - ошибка, см. пункт 1), то это либо
ISO 8859-10, либо
ISO 8859-4.
Я не могу вам сказать, как конкретно исправить ситуацию, потому что в вопросе недостаточно данных - слишком много ошибок наложено друг на друга. Начать решать проблему нужно, очевидно, с начала, то есть с выяснения, в какой действительно кодировке передается JSON (не глядя на HTTP-header, а глядя на сами данные).