簡體   English   中英

如何在 TextView 中設置格式化的 JSON 響應字符串?

[英]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 響應? 如果前者:

如何在 Android 中解析 JSON

如果您希望對其進行格式化,您可以手動進行:

例子:

{"J":5,"0":"N"}


首先刪除“{,}”,將這個數組 '"J":5,"0":"N"' 拆分為 ',' 然后進行着色只需檢查一個值是否有引號並相應地選擇。 只是一個簡單的字符串操作。

然后輸出:

  • {
  • 帶有着色的數組項的 foreach 循環
  • }

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM