По историческим причинам JavaScript не имеет полной поддержки Unicode, потому что создатели языка предполагали, что UTF-16 никогда не потребуется больше 2 байтов для кодирования одного символа. JSON наследует это, а \u
сущности принимают только 4 шестнадцатеричных символа.
Необходимо использовать обходной путь, который в основном состоит в разделении фактического 4-байтового символа UTF-16 на два 2-байтовых символа, как в:
var raw = "?";
var doesNotWork = "\u1F514";
var works = "\uD83D\uDD14";
console.log(raw, doesNotWork, works);
... или избавьтесь от сущностей и просто сбросьте текущий двоичный символ:
var data = ["?"];
var json = JSON.stringify(data);
console.log(json, JSON.parse(json));