在遍历嵌套的HashMap时,需要先判断当前遍历到的值是HashMap还是其他类型,如果是HashMap,则要继续进行遍历,如果不是HashMap,则直接处理当前的值。当出现java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY异常时,通常是因为当前遍历到的值应该是字符串类型,但实际上却是一个数组类型,因此需要对该值进行类型判断和转换。例如,可以使用Json库中的相关方法,将数组转换为字符串,然后再进行处理。下面是一个示例代码:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
Map map1 = new HashMap<>();
map1.put("name", "张三");
map1.put("age", 20);
Map map2 = new HashMap<>();
map2.put("name", "李四");
map2.put("age", 30);
JSONArray jsonArray = new JSONArray();
jsonArray.add(map1);
jsonArray.add(map2);
Map map = new HashMap<>();
map.put("list", jsonArray);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
JSONObject jsonObject = JSON.parseObject(jsonString);
JSONArray jsonArray1 = jsonObject.getJSONArray("list");
for (int i = 0; i < jsonArray1.size(); i++) {
Object o = jsonArray1.get(i);
if (o instanceof JSONObject) {
JSONObject jsonObject1 = (JSONObject) o;
System.out.println("name:" + jsonObject1.getString("name") + " age:" + jsonObject1.getInteger("age"));
} else if (o instanceof JSONArray) {
JSONArray jsonArray2 = (JSONArray) o;
System.out.println(jsonArray2.toJSONString());
}
}
}
}
上述代码中,我们定义了一个Map类型的变量map,其中包含一个名为list的键,该键的值为一个JSONArray类型的对象。我们使用fastjson库将这个Map转换为json字符串,并进行输出。然后,我们又将这个json字符串解析为一个JSONObject对象,并遍历其中的list值。在遍历过程中,我们使用instanceof运算符对当前遍历到的值进行判断,并进行相应的处理。这样,
下一篇:遍历嵌套的哈希/数组