如何显示格式类似于json.parser.online.fr
的JSON响应字符串?
例如:如何在textview中显示以下代码?
{
"age":100,
"name":"mkyong.com",
"messages":["msg 1","msg 2","msg 3"]
}
P.S:最好是彩色格式。
简而言之..
1.如何格式化和显示JSON字符串?
2.如何格式化和显示Java代码?
答案 0 :(得分:22)
我编写了以下实用程序方法来格式化和缩进(还没有颜色):
public static String formatString(String text){
StringBuilder json = new StringBuilder();
String indentString = "";
for (int i = 0; i < text.length(); i++) {
char letter = text.charAt(i);
switch (letter) {
case '{':
case '[':
json.append("\n" + indentString + letter + "\n");
indentString = indentString + "\t";
json.append(indentString);
break;
case '}':
case ']':
indentString = indentString.replaceFirst("\t", "");
json.append("\n" + indentString + letter);
break;
case ',':
json.append(letter + "\n" + indentString);
break;
default:
json.append(letter);
break;
}
}
return json.toString();
}
答案 1 :(得分:2)
您要解析它还是只显示原始JSON响应?如果是前者:
如果要格式化,可以手动执行:
示例:
{ “J”:5, “0”: “N”}
首先删除“{,}”,拆分此数组'“J”:5,“0”:“N”'by','然后为着色检查一个值是否有引号并选择因此。只是一个简单的字符串操作。
然后输出:
答案 2 :(得分:2)
@suhas_sm建议的方法很棒,但是如果有一个键或一个值包含一个特殊字符,例如“{”,则无法正确缩进。
我的解决方案(基于suhas_sm的方法):
public static String formatString(String text){
StringBuilder json = new StringBuilder();
String indentString = "";
boolean inQuotes = false;
boolean isEscaped = false;
for (int i = 0; i < text.length(); i++) {
char letter = text.charAt(i);
switch (letter) {
case '\\':
isEscaped = !isEscaped;
break;
case '"':
if (!isEscaped) {
inQuotes = !inQuotes;
}
break;
default:
isEscaped = false;
break;
}
if (!inQuotes && !isEscaped) {
switch (letter) {
case '{':
case '[':
json.append("\n" + indentString + letter + "\n");
indentString = indentString + "\t";
json.append(indentString);
break;
case '}':
case ']':
indentString = indentString.replaceFirst("\t", "");
json.append("\n" + indentString + letter);
break;
case ',':
json.append(letter + "\n" + indentString);
break;
default:
json.append(letter);
break;
}
} else {
json.append(letter);
}
}
return json.toString();
}
答案 3 :(得分:0)
您可以使用XStream这是一个库,将对象序列化为XML并再次返回
但它也可以用于JSON,请看这里XStream JSON Tutorial
可在此处找到更多图书馆http://www.json.org/
的修改
要以HTML格式显示,您可以使用Javascript:
JSON.stringify Function (JavaScript)
var jsonText = JSON.stringify(myJson, null, '\t'); \\ uses tab indent
document.write(jsonText);
答案 4 :(得分:0)
我知道这已经太晚了,但这是我最近写的一个解决方案。这将帮助您格式化已经部分格式化的JSON字符串。我在这里发布这个的原因是因为当我有一个部分格式化的输入JSON时,上面的解决方案不起作用。
你走了。 https://gist.github.com/rahulrvp/d10d6bea0e0b87883da5b8ce21f96c81
答案 5 :(得分:0)
您可以使用ObjectMapper。
首先,您将字符串转换为Object,然后执行此类操作。
String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
结果。
{
"age":100,
"name":"mkyong.com",
"messages":["msg 1","msg 2","msg 3"]
}
答案 6 :(得分:0)
更简单的方法是,有一种toString
方法带有一个JSONObject
的缩进空间参数,
可以这样使用:
JSONObject jsonObject = new JSONObject(jsonString);
textView.setText(jsonObject.toString(4));// 4 is no of spaces for indent
对JSONArray
参考:
https://developer.android.com/reference/org/json/JSONObject#toString(int)
https://alvinalexander.com/android/android-json-print-json-string-human-readable-format-debugging
答案 7 :(得分:0)
您可以使用此方法来美化 JSON。 (只是对@Rahul Tiwari 的回答的补充)
private String prettifyJson(String jsonString) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(jsonString);
} catch (JSONException ignored) {
}
try {
if (jsonObject != null) {
return jsonObject.toString(4);
}
} catch (JSONException ignored) {
}
return "empty";
}