njs + json + \uXXXX

Andrey Oktyabrskiy ano на bestmx.net
Чт Фев 14 21:07:07 UTC 2019


On 14.02.2019 18:38, Dmitry Volyntsev wrote:
> On 14.02.2019 17:57, Andrey Oktyabrskiy wrote:
>> Возможно ли в NJS получить строку
>> {"text":"\u0431\u0435\u043b\u0438\u0431\u0435\u0440\u0434\u0430"}
>>
>> из такого JSON'a
>> {"text":"белиберда"}
>>
>> JSON.parse прекрасно распознаёт такой JSON, а вот обратное 
>> преобразование как сделать, не соображу никак.
>>
>>  >> s = 
>> JSON.stringify(JSON.parse('{"text":"\u0431\u0435\u043b\u0438\u0431\u0435\u0440\u0434\u0430"}')) 
>>
>> '{"text":"белиберда"}'
> 
> А какую задачу вы пытаетесь решить?
Пытаюсь использовать чужой API, который принимает только такие строки. 
Требование выглядит странным, но повлиять на это поведение я никак не могу.

> Ничего готово не припоминаю, но можно, в качестве развлечения, написать 
> такую функцию
Я думал, может со stringify какой-то фокус можно сделать...

> : function uniсode_escape(s) {
> :   var codes = [];
> :   for (var i = 0; i < s.length; i++) {
> :       codes.push(s.codePointAt(i).toString(16).padStart(4, '0'));
> :   };
> :   return '\\u'+codes.join('\\u');
> : }
> :
> : >> unicode_escape('белиберда')
> : '\\u0431\\u0435\\u043b\\u0438\\u0431\\u0435\\u0440\\u0434\\u0430'
> : JSON.parse("\"" + unicode_escape('белиберда') + "\"")
> : 'белиберда'
Спасибо!

Для такой экзотической задачи очень даже адекватное решение.


Подробная информация о списке рассылки nginx-ru