Подтвердить что ты не робот

Минимизировать строку JSON с отступом в .NET.

У меня есть строка JSON с отступом, например.

{
  "a": 1
}

Однако у меня нет типа экземпляра для сериализации или десериализации.

В моей ситуации, что самый эффективный способ для минимизировать строку JSON-строку? например.

{"a":1}

Я не возражаю против использования библиотек, если они готовы к производству.

4b9b3361

Ответ 1

Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")

должен это сделать. Он гарантирует, что строки, содержащие символы пробела, сохраняются, а все остальные символы пробега удаляются. Все ключевые слова JSON (false, true, null) должны быть разделены запятыми или другими пунктуациями, поэтому необходимо сохранить только белые пробелы внутри строк.


Первый вариант (\"(?:[^\"\\\\]|\\\\.)*\") соответствует строке с двойными кавычками. Значение (...) означает, что выход фиксируется и доступен при замене как $1. [^\"\\\\] соответствует любому символу, кроме двойной кавычки или escape-символа \.

Поскольку совпадение происходит слева направо, второй параметр \s+ не будет соответствовать пробелу внутри строки.

Итак, мы сопоставляем целые строки и пробелы вне строк. В первом случае $1 является символом строки, а в последнем случае $1 является пустой строкой, потому что группа 1 не использовалась.


Это работает по назначению, потому что

  • единственными токенами в JSON, которые могут содержать пробелы, являются строки с двумя кавычками. В JSON нет ни капли строк, ни комментариев.
  • для грамматики JSON требуется односимвольная пунктуация между всеми многосимвольными токенами, поэтому удаление пространства не будет объединять токены. В JavaScript это может быть проблематично, потому что пространство должно ломать токены; var x=0 отличается от varx=0 и x - -(y) отличается от x--(y).