背景

互联网上有许多可用的Json序列化和反序列化的工具,例如fastjson,jackson,Gson等等,那么,我为什么还要自己写一个?

  1. 项目不方便依赖其他第三方库。比如有时候我们编写SDK,考虑到SDK体积和用户可能重复依赖而不依赖第三方库
  2. 自己想写

介绍

这个项目被我取名为Lson,意为Luoyesiqiu的Json库。官方的介绍:Lson是一个可以将Java对象序列化成Json和Json反序列化成Java对象的工具

用法

声明一个Bean类

import com.luoye.lson.annotation.Alias;
import com.luoye.lson.annotation.Ignore; public class MyBean {
public String name;
public String age;
@Alias("w")
public int weight;
@Ignore
public double wealth;
}

Java对象 ==> json

调用Lson.toJson将Java对象转成Json

MyBean bean = new MyBean();
bean.name = "luoyesiqiu";
bean.age = 18;
bean.weight = 60;
bean.wealth = 1000000.0lf;
String json = Lson.toJson(bean);
System.out.println(json);

输出:

{"name":"luoyesiqiu","age":18,"w":60}

json ==> Java对象

调用Lson.toObject将Json转换成Java对象

String json = "{\"name\":\"luoyesiqiu\",\"age\":18,\"w\":60}";
MyBean bean = Lson.toObject(json,MyBean.class);
System.out.println(bean.name);

输出:

luoyesiqiu

值得注意的是,在转成Java对象前,对象所属的类必须要拥有默认构造函数。所以,如果当类中添加了自定义的构造函数,那么还需要在类中定义一个无参数公开的默认构造函数,例如:

public MyBean(){
}

原理?

源码很简单,请自行查看源码

项目地址

https://github.com/luoyesiqiu/Lson

欢迎star,fork

我写了一个简单的JSON序列化和反序列化的工具的更多相关文章

  1. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  2. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  3. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  4. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  5. 简单实体Json序列化(输出JSON的属性可变)

    简单实体Json序列化(输出JSON的属性可变) 一.先看效果 可以看出 , 我们在序列化一个对像时, 只给出了 我们想要 输出的两个字段名,  实际实体有5个属性, 经过可变属性序列化后的JSON ...

  6. 写了一个简单的CGI Server

    之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...

  7. 一个简单的json解析器

    实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json; import java.util.LinkedList; import ja ...

  8. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  9. 写了一个简单可用的IOC

    根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录    只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...

随机推荐

  1. gstreamer常用命令

    由于有好一段时间没做GStreamer相关项目了,早前的一些记录需要做下记录,以待需要的时候查阅. 还是分几个小节来介绍吧,这样思路清晰一点.(格式有点乱,没时间整理,读者自行脑补) 1. 播放视频. ...

  2. PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642 题目描述: A reversible prime in any n ...

  3. 99%的Python用户都不知道的f-string隐秘技巧

    f-string想必很多Python用户都基础性的使用过,作为Python3.6版本开始引入的特性,通过它我们可以更加方便地向字符串中嵌入自定义内容,但f-string真正蕴含的功能远比大多数用户知道 ...

  4. Python数据分析入门(十四):数据分析中常用图

    折线图: 折线图用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势.示例图如下: 折线图应用场景: 折线图适合X轴是一个连续递增或递减的,对于没有规律 ...

  5. ON DUPLICATE KEY UPDATE作用

    ON DUPLICATE KEY UPDATE作用 先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑 语句的作用,当insert已经存在的记录时,执行Updat ...

  6. Dynamics CRM与ADFS安装到同一台服务器后ADFS服务与Dynamics CRM沙盒服务冲突提示808端口占用问题

    当我们安装Dynamics CRM的产品时如果是单台服务器部署而且部署了IFD的情况会遇到一个问题就是ADFS服务的监听端口和Dynamics CRM沙盒服务的端口冲突了. 这样会导致两个服务中的一个 ...

  7. 记一次在virtualbox中安装windows7遇到增强功能安装分辨率的问题

    在windows7中遇到很多次安装好增强功能后并不能对其实现放大分辨率,使其跟随虚拟机界面大小而改变. 经过许多次的安装和恢复快照,发现了在设置中,显存的大小一直都是处于边缘的状态, 关闭虚拟机后,我 ...

  8. Two point

    利用问题的本身与序列的特新,使用两个下标i, j对序列进行扫描(可以同向扫描,也可以反向扫描),以较低的时间复杂度解决问题,一般是O(n) 例1:给定一个递增的正整数序列和一个正整数M,求序列中的两个 ...

  9. 算法:第一节课Master定理

    1.ctex:要求用Tex编辑器进行作业的书写 2.与东大本科有差距,还需要多点努力才行. 3. 4.考试不考概念 5. 6.时间复杂度和空间复杂度 7.算法好坏的评价标准 8.基本运算 9.时间复杂 ...

  10. 强大的工具(一):Capslock+ 2.x版本

    2020.07.09 更新 作者更新了3.x版本,因此更新了3.x版本的博客,可以戳这里. 本篇文章介绍的是2.x版本. 1 Capslock+简介 Capslock+利用了键盘少用的Capslock ...