2015-10-11 2 views
0

Я использую ServiceStack Redis, чтобы сохранить значение JSON и получить его позже. Проблема в том, что когда я извлекаю значение из redis, он добавляет несколько «\», и ​​это разрушает мой JSON.Redis добавляет строку «» в строку JSON

, например я сохранить:

{ "пользователь": "123456", "пароль": "XXXXXXX"}

и когда я получить значение, которое она выходит:

{\ "пользователь \": \ "123456 \", \ "пароль \": \ "ххххххх \"}

Мне было интересно, есть ли какие-то настройки, чтобы предотвратить это? почему это происходит? JSON содержит некоторые символы «\ n», которые также добавляют к ним «\», я просто удалил их из примера, чтобы сделать его более читаемым.

+0

Не могли бы вы добавить свой код? – Cludch

+0

Привет @Cludch, вернувшись к моему коду, чтобы получить его здесь, я заметил, что я нарисовал результат от redis до строки (redis возвращает значение в виде байтового массива), и, вероятно, поэтому он добавляет все эти " », после некоторого тестирования я опубликую официальный результат здесь. – RealGigex

+0

Звучит здорово :) – Cludch

ответ

2

После проверки моего кода я заметил, что я возвращаю данные в строку при возврате данных из Redis (который возвращается как массив байтов), и он добавлял дополнительный «\». Мое решение проблемы заключалось в расшифровке моего JSON до base64String, прежде чем хранить его в Redis, а затем декодировать его обратно.

+0

провел два дня по этому вопросу. Сохранение в bash64 имеет один недостаток, поскольку вы не можете видеть через какой-либо инструмент какие данные у вас есть в кеше. – VsMaX

+0

не могли бы вы поделиться своим кодом? –

+0

Мне очень жаль, но код находится на серверах компании, в которой я больше не работаю или не имею доступа к ... /: – RealGigex

0

Клиент ServiceStack Redis упорядочивает сложные типы, как JSON, если вы хотите сохранить строку как есть, то вы должны использовать только API's that accept a string вместо общего T типа, например:

void SetAll(IEnumerable<string> keys, IEnumerable<string> values); 
void SetAll(Dictionary<string, string> map); 
void SetValues(Dictionary<string, string> map); 

void SetValue(string key, string value); 
void SetValue(string key, string value, TimeSpan expireIn); 
bool SetValueIfNotExists(string key, string value); 
bool SetValueIfExists(string key, string value); 

string GetValue(string key); 
string GetAndSetValue(string key, string value); 

List<string> GetValues(List<string> keys); 
Смежные вопросы