Перейти к содержанию
Fire Monkey от А до Я
  • 0

Показывает символов которое не должно показывать.


Axbor

Вопрос

TJSONObject *o = dynamic_cast<TJSONObject*>
		(TJSONObject::ParseJSONValue(TEncoding::ASCII->GetBytes(s), 0));
	if (!o)
		return;

	TJSONArray *a = dynamic_cast<TJSONArray*>(o->Get("M")->JsonValue);
	if (!a)
		return;

	for (int i = 0; i < a->Count; i++) {
		TJSONObject *b = dynamic_cast<TJSONObject*>(a->Get(i));
		if (!
			return;
		Jokes[i + CurrPos].Caption = b->Pairs[0]->JsonValue->ToString();
		Jokes[i + CurrPos].Content = b->Pairs[1]->JsonValue->ToString();
		Count++;
	}
	delete L;
	L = 0; 

"s" это текст которая хранит JSON внутри значений которого есть символ " (кавычка). В JONS е уже добавлены BackSlash перед такими символами. При парсинге JOSN опят добавляются BackSlash перед спец символами. Как от этого избежать?

Изменено пользователем Axbor
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

откуда получаете JSON?

банально можно replace сделать, до того как вогнать в ParseJSON

на delphi это так

s := StringReplace('\"', '"', s, []);
Ссылка на комментарий
  • 0

 

 

откуда получаете JSON?

банально можно replace сделать, до того как вогнать в ParseJSON

на delphi это так

s := StringReplace('\"', '"', s, []);

JSON получаю от своего сервера. Туда написано вот такой код:

<?php
	$result = $conn->query($sql);
	$rows = array(); 
	while($r = $result->fetch_assoc()){ 
	    $rows[] = $r;
	}
	print json_encode($rows);
?>

Оттуда получаю вот такой JSON:

[
{
"Caption":"Jinnixona",
"Content":"Jinnixonaning boshlig'i birorta jinni tuzalganmi-yo'qmi, tekshirish \r\nuchun ularni kinoteatrga olib boribdi. O'tiradigan stullarning hammasini\r\n bo'yatib qo'yibdi. Kim o'tirmasa o'sha tuzalgan bo'ladi deb o'ylabdi. \r\nJinnilarni hammasi o'tiribdi, lekin bittasi stulga gazeta solib keyin \r\no'tiribdi. Doktor uni tuzalganmi deb o'ylab savol beribdi: \r\n---- Sen nega gazeta solding, biror narsa sezdingmi? desa jinni: \r\n---- \"Men hammadan balandroqda o'tirmoqchi edim ,bo'yim pastroq\" debdi..."
}
]

Я и так сделал но думаю что есть другой более адекватный способ. При парсинге  \n, \r эти символы не преобразуется на \\n или \\r как я заметил. Они очень хорошо выполняют свою функцию

Изменено пользователем Axbor
Ссылка на комментарий
  • 0
  • Модераторы

я пока так оставил, другого выхода не нашел, константы не помогли.

 

вот так у меня

$answer =  '{"root":'.json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).'}';
echo str_replace("\\\"","'", $answer);
Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

я пока так оставил, другого выхода не нашел, константы не помогли.

 

вот так у меня

$answer =  '{"root":'.json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).'}';
echo str_replace("\\\"","'", $answer);
хорошая идея. Сделать replace на сервере..
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...