定制app开发将json字符串与实体类互相转换

文章目录

01.概述

定制app开发如果我们接收到的是一个json,定制app开发我们该如何对该定制app开发字符串进行解析?

  • 定制app开发使用实体类进行解析
  • 使用map进行解析

定制app开发使用的依赖jar包:fastjson

compile('com.alibaba:fastjson:1.2.xx')
  • 1

02.对json字符串进行解析

定制app开发使用进行解析

创建一个用于接收的实体类:使用json字符串中的那些字段,实体类就创建那些属性值

public class PersonInfoDto {    private Date bornTime;    private String userName;    private String sex;    private Integer age;    public Date getBornTime() {        return bornTime;    }    public void setBornTime(Date bornTime) {        this.bornTime = bornTime;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "PersonInfoDto{" +                "bornTime=" + bornTime +                ", userName='" + userName + '\'' +                ", sex='" + sex + '\'' +                ", age=" + age +                '}';    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

使用实体类进行解析

public class test01 {    //创建一个映射关系    private static ObjectMapper objectMapper = new ObjectMapper();    //映射关系配置    static {        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));    }    public static void main(String[] args) {        // json串里面的key与实体类字段匹配几个就会赋值几个,匹配不上的赋值为null        String jsonStr1 ="{\"bornTime\":\"2022-09-30 19:48:59\"}";        PersonInfoDto personInfoDto1 = fromJson(jsonStr1,PersonInfoDto.class);        System.out.println("personInfoDto1: " + personInfoDto1);        // json串中出现重复的字段,就会使用后者进行覆盖        String jsonStr2 ="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"userName\":\"AISMALL2\"}";        PersonInfoDto personInfoDto2 = fromJson(jsonStr2,PersonInfoDto.class);        System.out.println("personInfoDto2: " + personInfoDto2);        // json串里面的key与实体类字段匹配几个就会赋值几个,不管该传有多长,只取匹配到的key的value给实体类赋值        String jsonStr3 ="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18,\"age2\":18}";        PersonInfoDto personInfoDto3 = fromJson(jsonStr3,PersonInfoDto.class);        System.out.println("personInfoDto3: " + personInfoDto3);        String jsonStr4="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18}";        PersonInfoDto personInfoDto4 = fromJson(jsonStr4,PersonInfoDto.class);        System.out.println("personInfoDto4: " + personInfoDto4);    }    /*    * json字符串赋值给实体类方法    * */    public static <T> T fromJson(String s, Class<T> clazz) {        if (s == null || s.length() == 0) {            return null;        }        try {            return (T) objectMapper.readValue(s, clazz);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

运行结果:

personInfoDto1: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='null', sex='null', age=null}personInfoDto2: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL2', sex='null', age=null}personInfoDto3: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL', sex='man', age=18}personInfoDto4: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL', sex='man', age=18}
  • 1
  • 2
  • 3
  • 4

小结

  • json串里面的key与实体类字段匹配几个就会赋值几个,不管该传有多长,只取匹配到的key的value给实体类赋值,匹配不上的赋值为null。
  • json串中出现重复的字段,就会使用后者进行覆盖。

使用map进行解析

public class test01 {    public static void main(String[] args) {        // json字符串        String jsonStr = "{\"age\":18,\"sex\":\"man1\",\"userName\":\"AISMALL1\"}";        //====================方式一==============================        Map maps = (Map)JSON.parse(jsonStr);        for (Object map : maps.entrySet()) {            System.out.println(((Map.Entry)map).getKey()+": " + ((Map.Entry)map).getValue());        }        //====================方式二==============================        Map mapTypes =JSON.parseObject(jsonStr);        for(Object obj :mapTypes.keySet()){            System.out.println("key: " + obj + "  value: " + mapTypes.get(obj));        }        //====================方式三==============================        Map mapType = JSON.parseObject(jsonStr, Map.class);        System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!");        for(Object obj :mapType.keySet()){            System.out.println("key: " + obj + "  value: " + mapType.get(obj));        }        //====================方式四==============================        Map json =(Map)JSONObject.parse(jsonStr); //用Json对象解析成Map类型        for (Object map : json.entrySet()){            System.out.println(((Map.Entry)map).getKey() + ": "+((Map.Entry)map).getValue());        }        //====================方式五==============================        JSONObject jsonobject = JSONObject.parseObject(jsonStr);        for(Object map:jsonobject.entrySet()){            System.out.println(((Map.Entry)map).getKey()+": "+((Map.Entry)map).getValue());        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

03.Map和json字符串的互相转换

3.1.json字符串转换为Map

参考:使用map进行解析

3.2.Map转换为json字符串

public class test01 {    public static void main(String[] args) {        // 创建一个Hashmap        Map<String, Object> paraMap = new HashMap();        paraMap.put("userName","AISMALL");        paraMap.put("sex","man");        paraMap.put("age",18);        // 转换为json字符串        String jsonStr = JSONObject.toJSONString(paraMap);        System.out.println("jsonStr: " + jsonStr);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

运行结果:

jsonStr: {"sex":"man","userName":"AISMALL","age":18}
  • 1

04.json操作的一些小技巧

4.1.json字符转换为实体类

前面已经介绍了:

JSONObject.parseObject(jsonString, PersonInfoDto .class);
  • 1

4.2.实体类转json字符串

public class test01 {    public static void main(String[] args) {        Date date = new Date(); // 创建一个Date对象,获取当前时间        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 指定格式化格式        f.format(date);  // 将当前时间袼式化为指定的格式        PersonInfoDto personInfoDto = new PersonInfoDto();        personInfoDto.setBornTime(date);        personInfoDto.setUserName("AISMALL");        personInfoDto.setSex("man");        personInfoDto.setAge(18);        String jsonStr = JSON.toJSONString(personInfoDto);        System.out.println(jsonStr);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行结果:

{"age":18,"bornTime":1665113383685,"sex":"man","userName":"AISMALL"}
  • 1

4.3.json字符串转换为json对象

public class test01 {    public static void main(String[] args) {        // json字符串        String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}";        // json字符串转换为jsonObject        JSONObject jSONObject = JSONObject.parseObject(jsonStr);        System.out.println(jSONObject);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果:

{"test":"test","Result":[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]}
  • 1

4.4.json对象转换为json字符串

public class test01 {    public static void main(String[] args) {        // json字符串        String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Detail1\":\"Detail1\",\"Result1\":\"Result1\"},{\"Detail2\":\"Detail2\",\"Result2\":\"Result2\"},{\"Detail3\":\"Detail3\",\"Result3\":\"Result3\"}]}";        // json字符串转换为jsonObject        JSONObject jSONObject = JSONObject.parseObject(jsonStr);        // json对象转换为json字符串        String jsonObjectConv = JSON.toJSONString(jSONObject);        System.out.println(jsonObjectConv);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行结果:

{"test":"test","Result":[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]}
  • 1

4.5.json字符串数组转换json数组

注意:json字符串数组,即String是JSONArray格式的字符串

public class test01 {    public static void main(String[] args) {        // json字符串数组        String jsonArr = "[{\"Detail1\":\"Detail1\",\"Result1\":\"Result1\"},{\"Detail2\":\"Detail2\",\"Result2\":\"Result2\"},{\"Detail3\":\"Detail3\",\"Result3\":\"Result3\"}]";        JSONArray jsonArray= JSONArray.parseArray(jsonArr);        // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的        for (Object jsonStr:jsonArray) {            System.out.println(jsonStr);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行结果:

{"Detail1":"Detail1","Result1":"Result1"}{"Detail2":"Detail2","Result2":"Result2"}{"Detail3":"Detail3","Result3":"Result3"}
  • 1
  • 2
  • 3

4.6.List<实体类>转json数组

public class test01 {    public static void main(String[] args) {        PersonInfoDto personInfoDto1 = new PersonInfoDto();        personInfoDto1.setUserName("AISMALL1");        personInfoDto1.setSex("man1");        personInfoDto1.setAge(18);        PersonInfoDto personInfoDto2 = new PersonInfoDto();        personInfoDto2.setUserName("AISMALL2");        personInfoDto2.setSex("man2");        personInfoDto2.setAge(19);        List<PersonInfoDto> list = new ArrayList<>();        list.add(personInfoDto1);        list.add(personInfoDto2);        // 转换为json字符串        String jsonStr = JSONObject.toJSONString(list);        System.out.println("jsonStr: " + jsonStr);        // json字符串转换为json数组        JSONArray jsonArray= JSONArray.parseArray(jsonStr);        // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的        for (Object jsonStr1:jsonArray) {            System.out.println(jsonStr1);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

运行结果:

jsonStr: [{"age":18,"sex":"man1","userName":"AISMALL1"},{"age":19,"sex":"man2","userName":"AISMALL2"}]{"sex":"man1","userName":"AISMALL1","age":18}{"sex":"man2","userName":"AISMALL2","age":19}
  • 1
  • 2
  • 3
  • 4

4.7.json数组转List<实体类>

public class test01 {    public static void main(String[] args) {        // json字符串数组        String jsonStr = "[{\"age\":18,\"sex\":\"man1\",\"userName\":\"AISMALL1\"},{\"age\":19,\"sex\":\"man2\",\"userName\":\"AISMALL2\"}]";        System.out.println("jsonStr: " + jsonStr);        // json字符串转换为json数组        JSONArray jsonArray= JSONArray.parseArray(jsonStr);        List<PersonInfoDto> personInfoDtoList = jsonArray.toJavaList(PersonInfoDto.class);        for (PersonInfoDto personInfoDto:personInfoDtoList) {            System.out.println("personInfoDto: " + personInfoDto);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行结果:

jsonStr: [{"age":18,"sex":"man1","userName":"AISMALL1"},{"age":19,"sex":"man2","userName":"AISMALL2"}]personInfoDto: PersonInfoDto{bornTime=null, userName='AISMALL1', sex='man1', age=18}personInfoDto: PersonInfoDto{bornTime=null, userName='AISMALL2', sex='man2', age=19}
  • 1
  • 2
  • 3

05.josnObject操作的一些小技巧

JSONObject如下:

{  "test": "test",  "Result": [	  {	  "Result1": "Result1",	  "Detail1": "Detail1"	  },	  {	  "Result2": "Result2",	  "Detail2": "Detail2"	  },	  {	  "Result3": "Result3",	  "Detail3": "Detail3"	  }  ]}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5.1.JSONObject中的数组提取为JSONArray

public class test01 {    public static void main(String[] args) {        // json字符串        String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}";        // json字符串转换为jsonObject        JSONObject jSONObject = JSONObject.parseObject(jsonStr);        // 获取里面的Json字符串数组        JSONArray jsonArray = jSONObject.getJSONArray("Result");        // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的        for (Object jsonStr2:jsonArray) {            System.out.println(jsonStr2);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果

[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]
  • 1

5.2.JSONObject获取value

public class test01 {    public static void main(String[] args) {        // json字符串        String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}";        // json字符串转换为jsonObject        JSONObject jSONObject = JSONObject.parseObject(jsonStr);        // 返回值为String类型        String testStr = jSONObject.getString("test");        System.out.println("testStr: " + testStr);                // 返回值为Object类型        Object testObject = jSONObject.get("Result");        System.out.println("testObject: " + testObject);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果:

testStr: testtestObject: [{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]
  • 1
  • 2

06.总结

更多方法可以去查看JSONArrayJSONObject的源码。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发