[英]How set text in textview and formatted it as code? (Android Java)
[英]How to set formatted JSON response string in a TextView?
如何顯示格式類似於json.parser.online.fr
JSON 響應字符串?
例如:如何在 textview 中顯示以下代碼?
{
"age":100,
"name":"mkyong.com",
"messages":["msg 1","msg 2","msg 3"]
}
PS:最好是彩色格式。
簡而言之 ..
1.如何格式化和顯示JSON字符串?
2.如何格式化和顯示Java代碼?
我編寫了以下實用方法來格式化和縮進(還沒有顏色):
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();
}
更簡單的方法,有一個帶有縮進空間參數的toString
方法JSONObject
,
可以這樣使用:
JSONObject jsonObject = new JSONObject(jsonString);
textView.setText(jsonObject.toString(4));// 4 is number 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
@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();
}
你想解析它還是簡單地顯示原始 JSON 響應? 如果前者:
如果您希望對其進行格式化,您可以手動進行:
例子:
{"J":5,"0":"N"}
首先刪除“{,}”,將這個數組 '"J":5,"0":"N"' 拆分為 ',' 然后進行着色只需檢查一個值是否有引號並相應地選擇。 只是一個簡單的字符串操作。
然后輸出:
您可以使用XStream庫,它是一個將對象序列化為 XML 並再次返回的庫。
但它也可以用於 JSON,看這里XStream JSON 教程
更多的庫可以在這里找到http://www.json.org/
編輯
要在 HTML 中顯示,您可以使用 Javascript: JSON.stringify Function (JavaScript)
var jsonText = JSON.stringify(myJson, null, '\t'); \\ uses tab indent
document.write(jsonText);
我知道這太晚了,但這是我最近寫的一個解決方案。 這將幫助您格式化已經部分格式化的 JSON 字符串。 我在這里發布這個的原因是因為當我有一個部分格式化的輸入 JSON 時,上述解決方案不起作用。
干得好。 https://gist.github.com/rahulrvp/d10d6bea0e0b87883da5b8ce21f96c81
您可以使用 ObjectMapper。
第一件事是你將你的字符串轉換為一個對象,然后做這樣的事情。
String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
結果。
{
"age":100,
"name":"mkyong.com",
"messages":["msg 1","msg 2","msg 3"]
}
您可以使用此方法來美化 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";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.