首页 > 解决方案 > 列表to json 给出不完整的 json 列表

问题描述

我收到List<SkuDetails>如下:

public void onSkuDetailsResponse(BillingResult billingResult,
                                List<SkuDetails> skuDetailsList) {
    Gson gson = new Gson();
    String json = gson.toJson(skuDetailsList);
    Log.d(TAG, json);

SkuDetails 文档

然后我得到这个未完成的json:

[{"zza":"{\"skuDetailsToken\":\"s-r3R-r\",\"productId\":\"chill_lo_fi\",\"type\":\"inapp\",\"price\":\"R$ 5,49\",\"price_amount_micros\":5490000,\"price_currency_code\":\"BRL\",\"title\":\"Chill Lo-Fi (SDoubleKick - Footdrum - SS)\",\"description\":\"Chill Lo-Fi sound pack\"}","zzb":{"nameValuePairs":{"skuDetailsToken":"s-r3R-r","productId":"chill_lo_fi","type":"inapp","price":"R$ 5,49","price_amount_micros":5490000,"price_currency_code":"BRL","title":"Chill Lo-Fi (SDoubleKick - Footdrum - SS)","description":"Chill Lo-Fi sound pack"}}},{"zza":"{\"skuDetailsToken\":\"a-r\",\"productId\":\"percussion_and_fx\",\"type\":\"inapp\",\"price\":\"R$ 5,49\",\"price_amount_micros\":5490000,\"price_currency_code\":\"BRL\",\"title\":\"Percussion and Fx (SDoubleKick - Footdrum - SS)\",\"description\":\"Percussion and Fx sound pack\"}","zzb":{"nameValuePairs":{"skuDetailsToken":"s-dsf3

你可以看到这是一个列表,它应该打印正确,但我得到了,最后:

"zzb":{"nameValuePairs":{"skuDetailsToken":"s-dsf3

因此,当我将此 gson 重建为一个对象时,我得到一个异常

标签: javaandroid

解决方案


Gson不会截断您的 JSON 数据。logcat是这里的罪魁祸首,默认情况下,它会截断任何它认为太长的日志消息。这可能发生在您的 IDE 内部以及在logcat命令行上运行时。要摆脱日志上限,您可以通过创建如下包装器来拆分要记录的字符串:

package com.github.fundamentals.array;

public class Log {

  public static void d(String tag, String jsonText) {
    int maxLogSize = 2000;
    for (int i = 0; i <= jsonText.length() / maxLogSize; i++) {
      int start = i * maxLogSize;
      int end = (i + 1) * maxLogSize;
      end = end > jsonText.length() ? jsonText.length() : end;
      android.util.Log.d(tag, jsonText.substring(start, end));
    }
  }

}

您还可以使用setPrettyPrintingonGsonBuilder以人类可读的格式打印 JSON 字符串(用于调试)

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = gson.toJson(json);
Log.d(TAG, prettyJson);

推荐阅读