web-dev-qa-db-fra.com

android - format json string dans la sortie adb logcat

À des fins de journalisation, j'imprime la chaîne de réponse json et je peux les voir dans la commande Android "adb logcat". Existe-t-il un moyen de formater correctement la chaîne json dans la sortie adb logcat afin qu'elle ressemble à ce?

{ "code" : "0",
  "text" : "hello world"
} 
27
Michael

Vous pouvez utiliser la méthode JSONObject.toString() pour imprimer le JSON sur logcat.

Log.d("tag", jsonObject.toString(4));

Sortie

(29124): {
(29124):     "text": "hello world",
(29124):     "code": "0"
(29124): }
55
Deepak Bala

Je n'imprime pas assez le message JSON dans le code. Je double-clique simplement sur le message dans LogRabbit sur Mac et il l'imprimera ou mettra en surbrillance Base64 pour le décoder.

enter image description here

Divulgation complète, je suis le créateur de LogRabbit pour Mac.

6
Yepher

Vous pouvez formater json en log avec la forme originale en utilisant le code de mon logger:

Logger.dd("Section label", json);

Lien sur Github: https://github.com/scijoker/logger

La source:

import Android.os.Build;
import Android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by scijoker on 08.10.15.
 */
public class Logger {
    private static boolean DEBUG = true;

    public static void d(String tag, String arg) {
        if (isEnable()) {
            log(tag, arg);
        }
    }

    public static void d(String logMsg) {
        if (isEnable()) {
            log(getCurrentClassName(), getCurrentMethodName() + "(): " + logMsg);
        }
    }

    public static void dd(String tag, Object source) {
        if (isEnable()) {
            Object o = getJsonObjFromStr(source);
            if (o != null) {
                try {
                    if (o instanceof JSONObject) {
                        format(tag, ((JSONObject) o).toString(2));
                    } else if (o instanceof JSONArray) {
                        format(tag, ((JSONArray) o).toString(2));
                    } else {
                        format(tag, source);
                    }
                } catch (JSONException e) {
                    format(tag, source);
                }
            } else {
                format(tag, source);
            }
        }
    }

    private static void log(String tag, String msg) {
        Log.d(tag, msg);
    }

    private static String getSplitter(int length) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            builder.append("-");
        }
        return builder.toString();
    }

    private static void format(String tag, Object source) {
        tag = " " + tag + " ";
        log(" ", " ");
        log(" ", getSplitter(50) + tag + getSplitter(50));
        log(" ", "" + source);
        log(" ", getSplitter(100 + tag.length()));
        log(" ", " ");
    }

    private static String getCurrentMethodName() {
        return Thread.currentThread().getStackTrace()[4].getMethodName();
    }

    private static String getCurrentClassName() {
        String className = Thread.currentThread().getStackTrace()[4].getClassName();
        String[] temp = className.split("[\\.]");
        className = temp[temp.length - 1];
        return className;
    }

    private static Object getJsonObjFromStr(Object test) {
        Object o = null;
        try {
            o = new JSONObject(test.toString());
        } catch (JSONException ex) {
            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
                    o = new JSONArray(test);
                }
            } catch (JSONException ex1) {
                return null;
            }
        }
        return o;
    }

    public static boolean isEnable() {
        return DEBUG;
    }

    public static void setEnable(boolean flag) {
        Logger.DEBUG = flag;
    }
}
3
a.black13

fastJson fournit une méthode:

//serialize a prettyFormat json string 

public static final String toJSONString(Object object, boolean prettyFormat);

eg:Log.d(TAG,JSON.toJSONString(object, true));

1
user6102044