11

次のようなフォーマットでJSON応答文字列を表示するにはどうすればよいhttps://jsonformatter.org/json-parserですか?

例:テキストビューで次のコードを表示するにはどうすればよいですか?

{
    "age":100,
    "name":"mkyong.com",
    "messages":["msg 1","msg 2","msg 3"]
}

PS:できればカラーフォーマット。

要するに ..

1.JSON文字列をフォーマットして表示する方法は?
2.Javaコードをフォーマットして表示する方法は?

4

8 に答える 8

28

フォーマットとインデントを行うために、次のユーティリティメソッドを作成しました(まだ色はありません)。

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();
}
于 2013-01-09T11:55:19.537 に答える
10

はるかに単純なアプローチで、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

于 2018-08-09T18:17:44.300 に答える
3

@suhas_smが提案するメソッドは優れていますが、特殊文字の1つ(たとえば「{」)を含むキーまたは値がある場合、正しくインデントできません。

私の解決策(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();
}
于 2013-12-09T11:19:03.593 に答える
2

それを解析しますか、それとも単に生のJSON応答を表示しますか?前者の場合:

AndroidでJSONを解析する方法

フォーマットする場合は、手動で行うことができます。

例:

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


最初に"{、}"を削除し、この配列'"J":5、 "0": "N"'を'、'で分割します。次に、値に引用符が含まれているかどうかを確認し、それに応じて選択します。単純な文字列操作。

次に、出力します。

  • {{
  • 色付きの配列アイテムのforeachループ
  • }
于 2013-01-09T10:04:02.147 に答える
0

ライブラリであるXStreamを使用して、オブジェクトをXMLにシリアル化し、元に戻すことができます。
ただし、JSONにも使用できます。XStreamJSONチュートリアル
を参照してください。 その他のライブラリはここにあります。http :

//www.json.org/編集
HTMLで表示するには、Javascriptを使用できます 。JSON.stringify関数(JavaScript)

var jsonText = JSON.stringify(myJson, null, '\t'); \\ uses tab indent
document.write(jsonText);
于 2013-01-09T12:06:24.643 に答える
0

手遅れだとは思いますが、最近書いた解決策を次に示します。これは、すでに部分的にフォーマットされているJSON文字列をフォーマットするのに役立ちます。これをここに投稿する理由は、部分的にフォーマットされた入力JSONがある場合、上記のソリューションが機能しなかったためです。

どうぞ。https://gist.github.com/rahulrvp/d10d6bea0e0b87883da5b8ce21f96c81

于 2017-01-23T13:28:32.567 に答える
0

ObjectMapperを使用できます。

まず、文字列をオブジェクトに変換してから、次のようにします。

String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);

結果。

{
    "age":100,
    "name":"mkyong.com",
    "messages":["msg 1","msg 2","msg 3"]
}
于 2017-05-04T08:44:54.893 に答える
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";
}
于 2021-05-17T07:02:27.377 に答える