Java 如何在ArrayList中强制转换嵌套HashMap
有一个具有嵌套哈希映射的ArrayList。从父HashMap获取值很容易,但是当我尝试从嵌套HashMap(子HashMap)获取值时,我得到了ClassCastException。这是一个示例(类似于上一篇文章):Java 如何在ArrayList中强制转换嵌套HashMap,java,android,casting,Java,Android,Casting,有一个具有嵌套哈希映射的ArrayList。从父HashMap获取值很容易,但是当我尝试从嵌套HashMap(子HashMap)获取值时,我得到了ClassCastException。这是一个示例(类似于上一篇文章): JSON对象被表示为“映射”或“词汇表”,并不意味着您应该在Java中同样地表示它。物体就是为了这个目的而存在的 我建议您使用一个对象来解析关联的JSON并从中构造自身。例如: public class User { public User() { name = "
JSON对象被表示为“映射”或“词汇表”,并不意味着您应该在Java中同样地表示它。物体就是为了这个目的而存在的 我建议您使用一个对象来解析关联的JSON并从中构造自身。例如:
public class User {
public User() {
name = "";
friends = new ArrayList<User>();
}
/** Create a User from a JSON Object **/
public static User createFromJson(JSONObject json) {
User u = new User();
// Read simple fields of the JSON object
u.name = json.optString("name");
// Now recursively read other users from a "friend" property
JSONArray jsonFriends = json.optJSONArray("friends");
for (int i=0; i<jsonFriends.length(); ++i) {
// This is the next nested JSON Object
JSONObject jsonFriend = jsonFriends.getJSONObject(i);
// We convert it to a Java object
User friend = User.createFromJson(jsonFriend);
// And add it to our friend list
u.friends.add(friend);
}
}
private String name;
private List<User> friends;
}
这应该起作用:
int position = 0;
Map<String, Object> parent = data.get(position);
Map<String, String> child = (Map<String, String>) parent.get("children");
int位置=0;
Map parent=data.get(位置);
Map child=(Map)parent.get(“children”);
您的代码在Java 6上运行良好。也许是安卓Dalvik的bug
无论如何,我同意您应该考虑创建自己的类(“父”、“子”等),而不是使用集合内的集合中的集合。
ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> parentHash = new HashMap<String, Object>();
HashMap<String, String> childHash = new HashMap<String, String>();
childHash.put("child_id", "id");
childHash.put("name", "first last");
childHash.put("sex", "man");
parentHash.put("parent_id", "id");
parentHash.put("name", "first last");
parentHash.put("sex", "woman");
parentHash.put("children", childHash);
data.add(parentHash);
Map<String, String> fetchedChildData =
(Map<String, String>) data.get(0).get("children");
// prints: child_id=id
System.out.println("child_id=" + fetchedChildData.get("child_id"));
ArrayList data=new ArrayList();
HashMap parentHash=新HashMap();
HashMap childHash=新HashMap();
childHash.put(“child_id”,“id”);
childHash.put(“姓名”、“首末名”);
childHash.put(“性”、“男人”);
parentHash.put(“parent_id”,“id”);
parentHash.put(“名称”、“首末”);
parentHash.put(“性”、“女人”);
parentHash.put(“children”,childHash);
data.add(parentHash);
Map fetchedChildData=
(Map)data.get(0.get(“子项”);
//打印:child_id=id
System.out.println(“child_id=“+fetchedChildData.get(“child_id”));
我认为你不需要得到(职位)。试试这个。Map fetchedChildData=(Map)parentContainer.get(“子项”);什么是parentContainer?您可以演示如何定义和填充它吗?parentContainer
与数据
相同吗?请解释一下。你应该认真考虑你以前的问题中提出的建议,因为你总是在同一个问题上遇到问题,而你之前的问题的答案也避免了你遇到的情况。对不起,我指的是数据而不是帕伦特容器。我正在获取JSON对象,并将键+值放在一个新的HashMap中,并将新的HashMap内容存储在一个类似于上述示例的ArrayList中。然后,您可能应该更正问题中的以下内容:parentHash.get(position)
todata.get(position)
Oops,对此表示抱歉。我指的是数据。但问题是,它仍然不起作用…谢谢你的努力,我会在家里尝试,并在它起作用时将其标记为正确。
public class User {
public User() {
name = "";
friends = new ArrayList<User>();
}
/** Create a User from a JSON Object **/
public static User createFromJson(JSONObject json) {
User u = new User();
// Read simple fields of the JSON object
u.name = json.optString("name");
// Now recursively read other users from a "friend" property
JSONArray jsonFriends = json.optJSONArray("friends");
for (int i=0; i<jsonFriends.length(); ++i) {
// This is the next nested JSON Object
JSONObject jsonFriend = jsonFriends.getJSONObject(i);
// We convert it to a Java object
User friend = User.createFromJson(jsonFriend);
// And add it to our friend list
u.friends.add(friend);
}
}
private String name;
private List<User> friends;
}
{
"name": "Joe",
"friends": [
{
"name": "Jack"
},
{
"name": "Rose"
}
]
}
int position = 0;
Map<String, Object> parent = data.get(position);
Map<String, String> child = (Map<String, String>) parent.get("children");
ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> parentHash = new HashMap<String, Object>();
HashMap<String, String> childHash = new HashMap<String, String>();
childHash.put("child_id", "id");
childHash.put("name", "first last");
childHash.put("sex", "man");
parentHash.put("parent_id", "id");
parentHash.put("name", "first last");
parentHash.put("sex", "woman");
parentHash.put("children", childHash);
data.add(parentHash);
Map<String, String> fetchedChildData =
(Map<String, String>) data.get(0).get("children");
// prints: child_id=id
System.out.println("child_id=" + fetchedChildData.get("child_id"));