使用场景:后端对数据常见处理中有获取到JSON字符串对象数组,我们需通过自定义方法获取某个数组对象中的值并渲染到页面上,因此需要开发人员掌握JSON字符串(数组)与JAVA、Map对象(集合)的相互转化。
添加测试类,自行运行加深理解
详见代码如下,Person类自己定义(以下代码中使用的Person类要添加无参构造和有参构造)
// Map转字符串
@Test
public void Test02() throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "张三");
map.put("age", 23);
map.put("gender", "男");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map);
System.out.println(json);
}
// json字符串转化为java对象
@Test
public void Test03() throws Exception {
// String json="{\"name\":\"张三\",\"age\":23,\"gender\":\"男\"}";
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
System.out.println(json);
ObjectMapper mapper = new ObjectMapper();
// json字符串转化为java对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
System.out.println(person.getName());
}
// 利用阿里巴巴封装的FastJSON来转换json字符串的
// json字符串转化为Map
@Test
public void Test04() throws Exception {
String s = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
Map maps = (Map) JSON.parse(s);
for (Object map : maps.entrySet()) {
System.out.println(((Map.Entry) map).getKey() + " " + ((Map.Entry) map).getValue());
}
// System.out.println(maps);
// System.out.println(maps.get("name"));
}
// json字符串数组转化为Map集合
@Test
public void Test06() throws Exception {
String strArr = "[{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," +
"{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}]";
List<Map<String,String>> listObjectFir = (List<Map<String,String>>) JSONArray.parse(strArr);
System.out.println("利用JSONArray中的parse方法来解析json数组字符串");
for(Map<String,String> mapList : listObjectFir){
for (Map.Entry entry : mapList.entrySet()){
System.out.println( entry.getKey() + " " +entry.getValue());
}
}
}
@Test
public void Test07() throws Exception{
String s="[{\"id\":\"d304236c7bcea2f4da17d80f5198311e\",\"label\":\"张三\"}]";
List<Map<String,Object>> list= (List<Map<String, Object>>) JSONArray.parse(s);
for (Map<String,Object> maplist:list)
for(Map.Entry entry:maplist.entrySet())
System.out.println(entry.getKey()+" "+entry.getValue());
System.out.println(list.get(0).get("label"));
System.out.println(list.get(0).get("id"));
}