嗨,在将Json解析为实际的Java之前,我需要找到Json中一个键的值(即type
),但这样做会导致以下异常:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
Json
{
"type":1,
"password":"ac@123",
"role":"normaluser",
"name":"Archana Chatterjee",
"username":"a.chatterjee",
"designation":"Teacher",
"id":"T_02",
"age":42
}
码
Type listType = new TypeToken<ArrayList<Pair>>() {}.getType();
ArrayList<Pair> list = gson.fromJson(json, listType);
类
class Pair {
String property;
Object value;
// has getters and setters
}
发布于 2014-04-01 04:55:55
在阅读了这之后,我找到了一个更好的解决问题的方法。这里,我需要一个低级别的流解析器来获得JsonObject
。
String json3 = "{\"type\":1,\"password\":\"ac@123\",\"role\":\"normaluser\",\"name\":\"Archana Chatterjee\",\"username\":\"a.chatterjee\",\"designation\":\"Teacher\",\"id\":\"T_02\",\"age\":42}";
JsonParser jParser = new JsonParser();
JsonObject jObject = (JsonObject) jParser.parse(json3);
现在,JsonObject
具有返回键值的能力。javadoc表示相同
JsonElement elem = jObject.get("type");
JsoElement's
toString()返回键的值。(即此处类型的值)
System.out.println(elem);
输出
1
发布于 2014-03-29 15:16:51
首先,我建议你看一看Gson文档和JSON规格,因为你看起来很迷茫.
使用Gson,解析JSON的最常用和最简单的方法是创建一个与JSON结构相匹配的Java类结构。
在本例中,JSON是一个对象(它被{ }
包围),包含许多属性(例如,type
、password
、role
等)。
因此,您需要创建一个具有这些属性的Java类(与名称匹配):
class User
String type
String password
String role
// ...
然后只需调用Gson,给它一些JSON字符串,并告诉它您希望将该JSON解析到哪个类中:
User someUser = gson.fromJson( yourJson, User.class );
编辑:如果您的JSON可能会更改,您就不能使用一个类来解析它,所以您有几个选项。可能最简单的方法是尝试将JSON解析为Map
结构。
Map
是一个对象(与您的JSON一样),它包含对Key=>Value
(例如,'type'=>1
)。因此,您可以尝试解析它,如下所示:
Type mapType = new TypeToken< Map<String, String> >() {}.getType();
HashMap<String, String> map = gson.fromJson( yourJson, mapType );
注意:这种方法的问题是,由于Java是一种强类型语言,所以您的JSON必须有相同类型的对(例如)。在本例中,您的字段'type'
和'age'
不是字符串,而是整数,但我确信它可以自动将它们转换为字符串.
如果它不能,或者如果将'type'
和'age'
解析为整数非常重要,那么您唯一的选择就是编写一个自定义反序列化器.
https://stackoverflow.com/questions/22736272
复制相似问题