À 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"
}
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): }
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.
Divulgation complète, je suis le créateur de LogRabbit pour Mac.
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;
}
}
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));