我正在尝试使用TypedArray解析json。
我的json将是以下内容:
{
"id":"112233",
"tag":"From server",
"users":{
"vijay":1,
"dhas":2,
"vijaydhas":3
}
}
这里的users对象键是动态的。我将在运行时从服务器收到。那时只有我不知道密钥(vijay,dhas,vijaydhas)。
为了解析id和tag,我将执行以下代码。
@Override
public MagazineReader read (JsonReader in) throws IOException {
final MagazineReader magazineReader = new MagazineReader();
in.beginObject();
while (in.hasNext()) {
switch (in.nextName()) {
case "id":
magazineReader.setID(in.nextInt());
break;
case "tag":
magazineReader.setTag(in.nextString());
break;
in.beginArray();
/*
For User how to read the json???
*/
}
in.endObject();
}
现在,我想在不知道键的情况下读取并解析用户JsonArray及其对象。我知道如何在不知道键的情况下解析JSONObject。
JSONObject users= obj.getJSONObject("users");
Iterator iteratorObj = detailList.keys();
while (iteratorObj.hasNext())
{
String jsonKey = (String)iteratorObj.next();
property.put(jsonKey,usersList.get(jsonKey));
}
但是在JsonReader中,我不知道如何在不知道键的情况下不知道如何读取json值。请帮我。[1]:https://javacreed.com/gson-typeadapter-example
您可以执行以下操作:
@Override
public MagazineReader read(JsonReader in) throws IOException {
final MagazineReader magazineReader = new MagazineReader();
final Map<String, Object> users = new HashMap<>();
in.beginObject();
while (in.hasNext()) {
switch (in.nextName()) {
case "id":
magazineReader.setID(in.nextInt());
break;
case "tag":
magazineReader.setTag(in.nextString());
break;
case "users":
in.beginObject();
while(in.hasNext()) {
String key = in.nextName();
JsonToken type = in.peek();
if (type == JsonToken.NUMBER) {
users.put(key, in.nextInt());
} else if (type == JsonToken.STRING) {
users.put(key, in.nextString());
} else {
System.err.println("Unhandled type: " + type);
}
}
in.endObject();
break;
}
in.endObject();
}
}
我已经使用过aMap
来存储键值对,您可以使用任何类型的对象来实现。另外,我只添加了数字和字符串值的处理程序。
重要的部分是,在您到达users
键时开始一个新对象,然后遍历该对象的所有属性。如何处理对象的条目取决于您要执行的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句