GSON: ожидал строку, но был BEGIN_OBJECT?

См. здесь: http://developer.android.com/guide/developing/tools/zipalign.html

Внимание: вы должны использовать zipalign на одном из двух конкретных точек в процессе создания приложений, в зависимости от того, какой инструмент для подписи приложения вы используете:

Если вы используете apksigner, zipalign должен выполняться только до того, как файл APK был подписан. Если вы подписываете APK с помощью apksigner и вносите дальнейшие изменения в APK, его подпись недействительна.

Если вы используете jarsigner, zipalign должен выполняться только после того, как файл APK был подписан.

16
задан Steven Schoen 20 July 2012 в 00:52
поделиться

2 ответа

Структура JSON - это объект с одним элементом с именем «access_token» - это не просто строка. Его можно десериализовать в соответствующую структуру данных Java, такую ​​как Map, следующим образом.

import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonFoo
{
  public static void main(String[] args)
  {
    String jsonInput = "{\"access_token\": \"abcdefgh\"}";

    Map<String, String> map = new Gson().fromJson(jsonInput, new TypeToken<Map<String, String>>() {}.getType());
    String key = map.get("access_token");
    System.out.println(key);
  }
}

Другим распространенным подходом является использование более конкретной структуры данных Java, которая соответствует JSON. Например:

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

public class GsonFoo
{
  public static void main(String[] args)
  {
    String jsonInput = "{\"access_token\": \"abcdefgh\"}";

    Response response = new Gson().fromJson(jsonInput, Response.class);
    System.out.println(response.key);
  }
}

class Response
{
  @SerializedName("access_token")
  String key;
}
25
ответ дан Programmer Bruce 20 July 2012 в 00:52
поделиться

Еще одна возможность «низкого уровня» с использованием Gson JsonParser:

package stackoverflow.questions.q11571412;

import com.google.gson.*;

public class GsonFooWithParser
{
  public static void main(String[] args)
  {
    String jsonInput = "{\"access_token\": \"abcdefgh\"}";

    JsonElement je = new JsonParser().parse(jsonInput);

    String value = je.getAsJsonObject().get("access_token").getAsString();
    System.out.println(value);
  }
}

Если однажды вы напишите собственный десериализатор, JsonElement станет вашим лучшим другом.

4
ответ дан giampaolo 20 July 2012 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: