這就是我最終解決這個問題的方法。不是一個很好的解決方案,但不知道如何做得更好(考慮到有問題的輸入限制)。不過,它運行良好,並試圖儘可能地打印json。這是建立在這裏看到的PHP解決方案:https://gist.github.com/GloryFish/1045396
public String prettyPrintJSONAsString(String jsonString) {
int tabCount = 0;
StringBuffer prettyPrintJson = new StringBuffer();
String lineSeparator = "\r\n";
String tab = " ";
boolean ignoreNext = false;
boolean inQuote = false;
char character;
/* Loop through each character to style the output */
for (int i = 0; i < jsonString.length(); i++) {
character = jsonString.charAt(i);
if (inQuote) {
if (ignoreNext) {
ignoreNext = false;
} else if (character == '"') {
inQuote = !inQuote;
}
prettyPrintJson.append(character);
} else {
if (ignoreNext ? ignoreNext = !ignoreNext : ignoreNext);
switch (character) {
case '[':
++tabCount;
prettyPrintJson.append(character);
prettyPrintJson.append(lineSeparator);
printIndent(tabCount, prettyPrintJson, tab);
break;
case ']':
--tabCount;
prettyPrintJson.append(lineSeparator);
printIndent(tabCount, prettyPrintJson, tab);
prettyPrintJson.append(character);
break;
case '{':
++tabCount;
prettyPrintJson.append(character);
prettyPrintJson.append(lineSeparator);
printIndent(tabCount, prettyPrintJson, tab);
break;
case '}':
--tabCount;
prettyPrintJson.append(lineSeparator);
printIndent(tabCount, prettyPrintJson, tab);
prettyPrintJson.append(character);
break;
case '"':
inQuote = !inQuote;
prettyPrintJson.append(character);
break;
case ',':
prettyPrintJson.append(character);
prettyPrintJson.append(lineSeparator);
printIndent(tabCount, prettyPrintJson, tab);
break;
case ':':
prettyPrintJson.append(character + " ");
break;
case '\\':
prettyPrintJson.append(character);
ignoreNext = true;
break;
default:
prettyPrintJson.append(character);
break;
}
}
}
return prettyPrintJson.toString();
}
private void printIndent(int count, StringBuffer stringBuffer, String indent) {
for (int i = 0; i < count; i++) {
stringBuffer.append(indent);
}
}
這將是具有挑戰性的,因爲結構不能從無效的JSON推斷。這就是整個問題。 – Taylor
因此,沒有辦法與正則表達式做類似的問題/答案我鏈接的XML? –
如何在JSON的末尾添加'''','}',')'和''以使其正確解析? – johnchen902