Не JSON Формат в JSON формат - PullRequest
       0

Не JSON Формат в JSON формат

1 голос
/ 08 февраля 2012

У меня есть строка, которая «почти» является строкой json, только ее ключи не заключены в кавычки.Обычно он используется пользовательским интерфейсом и javascript, у которых нет проблем с его интерпретацией.Однако кажется, что парсеры JSON в Java, о которых я знаю, требуют, чтобы ключ был заключен в кавычки.

Есть ли способ, которым я могу преобразовать строку в допустимую строку json, возможно, с помощью регулярного выражения в Java.Или есть библиотека JSON, которая немного мягкая.

Строка будет иметь вид

{
   A : "Val1", 
   B : [ SOME NESTED STUFF], 
   C : "Val3"
}

, и мне нужно преобразовать ее в

{
   "A" : "Val1", 
   "B" : [ SOME NESTED STUFF], 
   "C" : "Val3"
}

не затрагивая ни один из вложенных вещей.Количество ключей, т. Е. A, B, C., фиксировано.

Спасибо

PS Я не могу получить соответствующую строку JSON, возвращенную мне, это уже существующий код, и это довольно рискованноизмени это.

Ответы [ 4 ]

1 голос
/ 08 февраля 2012

Если вы уверены, что все строки, начинающиеся с unquoted_word :, требуют слова в кавычках, вы можете использовать что-то вроде:

str.replaceAll("(?m)^(\s+)(\w+)(\s*:)", "$1\"$2\"$3");

Но если вы можете, вам лучше использовать правильный парсер, как предлагают другие ответы.

1 голос
/ 08 февраля 2012

Если вы используете Джексон , он поддерживает нестандартный JSON, включая ключи без кавычек: http://www.cowtowncoder.com/blog/archives/2009/08/entry_310.html

0 голосов
/ 08 февраля 2012

Если вам действительно нужно регулярное выражение, это может сработать:

jsonString.replaceAll("(\\w+)\\s*\\:","\"$1\" :");

Тем не менее, если вы действительно беспокоитесь о том, чтобы касаться вложенных элементов и угловых случаев, вам нужен настоящий анализатор, а не регулярное выражение.Невозможно, чтобы регулярное выражение было достаточно точным, чтобы избежать путаницы, если одним из ваших значений является строка " A : ".Если pingw33n верен в отношении парсера Джексона, это, безусловно, лучший ответ.

0 голосов
/ 08 февраля 2012

используйте следующий код строки, чтобы заключить все ключи (одна буква заглавными здесь считается допустимым ключом) с двойными кавычками:

str = str.replaceAll("\s([A-Z])\s\:\s\"", "\"$1\" : ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...