Ste*_*oen 17 android json gson
我正在尝试使用GSON来解析一些非常简单的JSON.这是我的代码:
Gson gson = new Gson();
InputStreamReader reader = new InputStreamReader(getJsonData(url));
String key = gson.fromJson(reader, String.class);
Run Code Online (Sandbox Code Playgroud)
这是从url返回的JSON:
{
"access_token": "abcdefgh"
}
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:
E/AndroidRuntime(19447): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我是GSON的新手.
Pro*_*uce 25
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);
}
}
Run Code Online (Sandbox Code Playgroud)
另一种常见方法是使用与JSON匹配的更具体的Java数据结构.例如:
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;
}
Run Code Online (Sandbox Code Playgroud)
使用 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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有一天您要编写自定义解串器,那么 JsonElement 将是您最好的朋友。
| 归档时间: |
|
| 查看次数: |
39275 次 |
| 最近记录: |