java中对象和JSON格式的转换

这篇具有很好参考价值的文章主要介绍了java中对象和JSON格式的转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java中对象和JSON格式的转换

JSON

JSON(javaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读性和可拓展性。

它采用键值对的方式表示数据,支持基本数据类型和复合数据类型。可用于描述结构化数据和非结构化数据。

结构

对象结构(无序):

无序的对象结构在不同语言中称法不同

对象(object):一个对象包含一系列非排序的键/值对,一个对象以 {开始,并以 }结束。每个键/值对之间使用 :分区。多个键值对之间通过 , 分割。

数组结构(有序):

有序的的数组结构。将数组作为有序数组进行转换JSON,就可以得到有序的JSON数组结构

数组:一个数组包含一系列排序的键/值对,一个对象以 [开始,并以 ]结束。每个键/值对之间使用 :分区。多个键值对之间通过 , 分割。

java 对象转json字符串,特训营,知识点,java,java,开发语言

tips:

  1. 需要注意的是JSON 的键是一个 String 类型的字符串。
  2. 值(value):可以是双引号括起来的字符串(string)数值(number)truefalsenull对象(object)或者数组(array)。这些结构可以嵌套使用。
  3. JSON格式不支持注释,且字符串必须使用双引号"",而不是 单引号。
  4. JSON格式可以使用一些转义字符

JSON在java中的使用

Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。

java 中常见的解析 json第三方库(jar包)

  1. -JSON官方
  2. - GSON
  3. - FastJson
  4. - Jackson 2
  5. - hutool-json

每种方式生成和解析进行阐述

1.使用JSON官方提供的JSON

官方提供的JSON具有通用性,就是解析时有点费事。
maven依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

生成JSON对象
1.使用JSONObject添加对象
代码:

 @Test
    public void Test3(){
    	//创建JSON对象
        JSONObject jsonObject = new JSONObject();
        Object obj = null;
        //像JSON对象中添加数据
        jsonObject.put("name", "张三");
        jsonObject.put("age", 20);
        jsonObject.put("birth", "1998-01-01");
        jsonObject.put("haveCar", obj);
        jsonObject.put("hasGirlfriend", true);
        jsonObject.put("likes", new String[]{"看电影", "看书"});
		//将JSON对象以字符串的形式打印
        System.out.println(jsonObject.toString());
        
    }

结果:
java 对象转json字符串,特训营,知识点,java,java,开发语言

在字符串输出的时候会发现,输出的字符串与数据存储的顺序可能是不一致的。原因是调用jsonObject.put()方法的时候,其底层是一个 HashMap,数据被存到了HashMap 中。 HashMap根据键的哈希码来决定键的位置,所以可能会出现上面的问题。

2.javaBeanJSON
javaBean:

public class User {
    private String name;
    private int age;
    private String[] likes;
    // 省略 get 与 set 方法
}

JavaBean TO JSON:

public static void beanToJsonTest() {
    User user = new User();

    user.setName("张三");
    user.setAge(20);
    user.setLikes(new String[]{"看电影", "看书"});

    JSONObject jsonObject = new JSONObject(user);
    System.out.println(jsonObject.toString());
}

解析JSON

首先有两张表,分别是学生表和年级表,年纪和学生是一对多关系

//JSON字符串
String json = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16},{'id':102,'name':'刘二','age':23}]}";
//将JSON字符串转为JSON对象
JSONObject jsonObject = JSONObject.fromObject(json);
//创建年级对象,然后进行解析JSON,并赋值
Grade grade = new Grade();
grade.setId(jsonObject.getInt("id"));
grade.setName(jsonObject.getString("name"));
//创建一个集合用来存储学生对象
ArrayList<Student> students = new ArrayList<>();
JSONArray stus = jsonObject.getJSONArray("stus");
//遍历JSONArray对象,解析后放入集合中
for (Object o : stus) {
    JSONObject jsonObject1 = JSONObject.fromObject(o);
    Student student = new Student(jsonObject1.getInt("id"),jsonObject1.getString("name"), jsonObject1.getInt("age"));
    students.add(student);
    }
grade.setStus(students) ;   
//至此一个JSON字符串解析为Java对象

2.使用GSON

maven依赖:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>

生成JSON对象:

public static void beanToJsonTest() {
    User user = new User();

    user.setName("张三");
    user.setAge(20);
    user.setLike(new String[]{"看电影", "看书"});

    /**
    * 使用GsonBuilder 可以作一些额外处理,比如格式化输出,预处理等
    * 
    * GsonBuilder gsonBuilder = new GsonBuilder();
    * gsonBuilder.setPrettyPrinting();    
    * Gson gson = gsonBuilder.create();
    */
    Gson gson = new Gson();
    System.out.println(gson.toJson(user));
}

解析JSON

public static void jsonToBeanTest() {
        String jsonStr = "{\"name\":\"李四\",\"age\":22 , \"like\":[\"看电影\",\"看书\"],\"birth\":\"1996-01-01\"}";
        GsonBuilder gsonBuilder = new GsonBuilder();
        // 设置日期转换格式
        gsonBuilder.setDateFormat("yyyy-MM--dd");   
        Gson gson = gsonBuilder.create();
        //解析对象:第一个参数:待解析的字符串 第二个参数结果数据类型的Class对象
        User user = gson.fromJson(jsonStr, User.class);
    }

3.使用FastJSON

FastJSON是阿里巴巴的产品,效率最高,深受广大程序员的喜爱
maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

生成JSON对象:
创建JSON 对象非常简单,只需使用 JSONObjectfastJson提供的json对象) 和 JSONArrayfastJson提供json数组对象) 对象即可。

@Test
public void whenGenerateJson_thanGenerationCorrect() throws ParseException {
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    // jsonString --> obj
	//String[] strings = JSON.parseObject(str, String[].class);
   // System.out.println(Arrays.toString(strings));
    // obj --> jsonString
    String jsonOutput = jsonArray.toJSONString();
}
    

解析JSON

@Test
public void whenJson_thanConvertToObjectCorrect() {
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);

JSON 对象与字符串的相互转化
最常用的就是这个直接转化了,来吧:

//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);
4.使用JackSon

jackSon解析JSON,SpringMVC内置的解析器就是这个
maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

生成JSON字符串

ArrayList<Student> students = new ArrayList<>();
for (int i = 0; i < 3; i++) {
     students.add(new Student(100 + i, "二稿" + i, 1000 + i));
}
Grade grade = new Grade(22, "语文", students);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(grade);
System.out.println(s);

解析JSON字符串

// 对象嵌套数组嵌套对象
String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
// 数组
String json2 = "[\"北京\",\"天津\",\"杭州\"]";

ObjectMapper mapper = new ObjectMapper();
Grade grade = mapper.readValue(json1, Grade.class);
System.out.println(grade);

List<String> list = mapper.readValue(json2, newTypeReference<List<String>>() {});
System.out.println(list)
5、hutool-json

maven依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.0.6</version>
</dependency>

字符串 转 JSONObject

String jsonStr = "{\"DispositionNotificationListObject\":{\"DispositionNotificationObject\":[{\"PersonObject\":{\"GenderCode\":0,\"EthicCode\":0,\"DeviceID\":\"0\",\"SourceID\":\"022019121117052900016\",\"SubImageList\":{\"SubImageInfoObject\":[{\"Type\":\"11\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134716\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"11\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"14\",\"StoragePath\":\"xxx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1}]},\"LeftTopY\":141,\"LeftTopX\":104,\"Name\":\"图片姓名测试\",\"InfoKind\":1,\"PersonID\":\"0220191211170529000180100019\",\"RightBtmY\":806,\"RightBtmX\":932,\"IDNumber\":\"\"},\"NotificationID\":\"202002031736\",\"DispositionID\":\"71\",\"TriggerTime\":\"2020-02-03 15:34:15\",\"Title\":\"第三方1400告警信息接收测试\"}]}}";
JSONObject json = new JSONObject(jsonStr);

解析 JSONObject:

1)获取对象

JSONObject dispositionNotificationListObject = json.getJSONObject("DispositionNotificationListObject");

2)获取单值

String alertPersonName = personObject.getStr("Name");
Integer eventSort = subImageInfoObject.getInt("EventSort");

字符串 转 JSONArray

String jsonArrayStr = "[{\"Type\":\"11\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL1ZRQnV1LVlsWFpGd29lN1dJSnlXUmc9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134716\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"11\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL0gzc1dYN3lXRmh1Zmd0Sjd6Tlo1cnc9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1},{\"Type\":\"14\",\"StoragePath\":\"http://192.168.166.203:11180/storage/v1/image/global?cluster_id=ShenSi&uri_base64=bm9ybWFsOi8vcmVwb3NpdG9yeS1idWlsZGVyLzIwMjAwMTIwL0JXS3RIQm1aVXpUT3prNzJOYW50S1E9PUAx\",\"DeviceID\":\"0\",\"ImageID\":\"022019121117052900016\",\"EventSort\":0,\"ShotTime\":\"19700119134600\",\"Height\":-1,\"FileFormat\":\"jpg\",\"Width\":-1}]";
JSONArray jsonArray = new JSONArray(jsonArrayStr);

解析 JSONArray:

1)获取数组对象

JSONArray subImageInfoObjectList = subImageList.getJSONArray("SubImageInfoObject");

2)获取单值

for(int j=0; j< jsonArray.size(); j++){
    JSONObject subImageInfoObject = jsonArray.getJSONObject(j);
    String Type = subImageInfoObject.getStr("Type");
    Integer width = subImageInfoObject.getInt("Width");   
    System.out.println(Type);
}

tips:

此时,我们深克隆实现就有三种了:
- 自定义 clone 实现 【麻烦死了】
- 将引用数据类型的字段也克隆一份
- 使用序列化实现
- 将对象序列化为字节流,再反序列化为对象
- 通过JSON,使用第三方库实现 【推荐】
- 使用第三方库实现深克隆,比如:GSON、FastJson、Jackson 2、hutool-json文章来源地址https://www.toymoban.com/news/detail-759408.html

到了这里,关于java中对象和JSON格式的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 列表json格式的字符串转列表对象 并遍历取值

    导入依赖与包 最后输出的数据; 以上即为本人项目中的处理思路,若有帮助到你,那真的太好了! 若没有望亲喷

    2024年02月15日
    浏览(38)
  • <Java工具类>json字符串、List Map,List 对象转换为相应的JavaBean对象

    依赖: 工具类(直接上代码): 使用场景: (1).使用泛型方法:把json字符串转换为相应的JavaBean对象 ; 一般用于:Controller层: 例如: (2).List Map转换List 对象:如List,将第二个参数传递为Student对象; (3).List 对象转换List Map:

    2024年02月12日
    浏览(50)
  • Json对象和Json字符串之间相互转换

    作为前端开发,在和后端进行联调接口时,总会遇到要求传JSON字符串或是JSON对象,或者是返回值里是JSON字符串要在页面上展示JSON对象这种情况,都需要前端开发人员对Json对象和Json对象进行相互转换,得到想要的结果。 废话不多说,直接上干货: 1.首先定义一个Json对象:

    2024年02月11日
    浏览(41)
  • 【JavaSE专栏88】Java字符串和JSON对象的转换,转来转去就是这么玩!

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 JSON 的概念,以及 Java 中 JSON 对象和字符串的转换方法,并给出了样例代

    2024年02月04日
    浏览(43)
  • 将对象转换为JSON字符串,即手写JSON.stringify

    分析: Date将转为string undefined、Symbol会直接过滤掉,但如果是数组项是undefined、Symbol、Function,那么则返回null 正则RegExp会返回空对象{} NaN、Function、null会返回null,但是呢,function会被过滤掉 Infinity会转为null 如果是数组的话,返回的是数组的序列化 string返回原始值 number、b

    2024年02月11日
    浏览(35)
  • JS 将 json 对象转成字符串并保留格式 - JSON.stringify()

    JSON.stringify(value, replacer, space) value :将要序列化成一个 JSON 字符串的值。 replacer(可选) :如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的

    2024年02月13日
    浏览(40)
  • JavaScript 中JSON 字符串和对象之间的转换。

    用于将 JavaScript 对象转换为 JSON 字符串。 它接受一个 JavaScript 对象作为参数,并返回对应的 JSON 字符串表示。例如: 用于将 JSON 字符串转换为 JavaScript 对象。 它接受一个 JSON 字符串作为参数,并返回对应的 JavaScript 对象。例如:  

    2024年01月23日
    浏览(35)
  • 微信小程序开发——json对象和字符串转换

    JSON对象和字符串的互转 注意事项 1、JSON操作时一定要保证是JSON格式的字符串,或对象。 报错如下: 原代码 1)JSON对象转字符串 2)JSON字符串转对象 解决:JSON字符串转对象时,字符串值应该是 跳转设置是:“…?item=”+jsonstr,即字符参数是 item ,所以转换时要取值 options

    2024年02月11日
    浏览(39)
  • java将json字符串转换成json数组

    有些时候我们需要将json字符串转换成数组,并且只取一些属性值进行下一个方法的赋值,这样就涉及到了json字符串的转换了, json字符串有两种形式,一种是以{A,B,C},一种是[{A},{B},{C}]。但是很多时候是这两种的结合。 首先导入jar包 如果是第一种只需要加入以下代码,注意

    2024年02月11日
    浏览(38)
  • JAVA 字符串JSON Map 对象转化

    目录 字符串转JSON JSON 转字符串 json字符串转map 将map转成json字符串 map转对象 将对象转化成map 将对象转化成JSON Json转对象 方式一 第一步 将map 转成json字符串对象 第二步 将json字符串对象转化成对象 第一步 将对象转化成json字符串 第二步 将JSON字符串转成map 方法一:fastjson转

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包