Перейти к содержанию
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, []);

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 эмодзи.

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

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

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

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