Данные JSON должны быть оцениваемой строкой JavaScript - «символ должен быть экранирован в \» (символ «в противоположность ограничителю строки»), а символ \ в этом выражении также должен экранироваться ( потому что \ также является специальным символом). Так что это была эта строка все время, она каждый раз печаталась по-разному.
Взять этот JavaScript для примера:
object = JSON.parse("{\"hello\":\"World\"}");
alert(object.hello);
Следующее является скорее предположением, чем фактическим знанием, потому что я не знаю, как именно ведут себя используемые вами классы, но я думаю, что это правильно.
Как видите, символы "
необходимо экранировать до \"
, поэтому ваш сериализатор .NET JSON делает именно это. Все хорошо, интерпретируя это как JS будет работать как ожидалось.
Теперь , вероятно, происходит из-за того, что ваш конструктор JSONObject не ожидает, что строки уже должным образом экранированы, поэтому он сам это делает. Чтобы уточнить: когда вы говорите «с одним escape-символом», вы, вероятно, имеете в виду что-то вроде этого:
String workingJSONString = "{\"Hello\":\"World\"}"
право? Проблема здесь в том, что Java имеет те же правила экранирования, что и JavaScript - это не то, что вы получаете из своего HTTPRequest, а то, что вы получаете
String youGotThis = "{\\\"Hello\\\":\\\"World\\\"}"
Потому что в вашей String есть буквальные обратные слеши, и их тоже нужно избегать. Я совершенно уверен, что это именно то, что происходит, и вам, вероятно, придется либо сказать своему сериализатору .NET JSON не применять управляющие правила, либо найти что-то, что создает JSONObject из правильно экранированной строки JSON, либо удалить ненужные экранированные символы. сами.
Надеюсь, это помогло - но опять же, я не совсем уверен, поэтому вам следует просто проверить, действительно ли он ведет себя так, как я сказал.