首页 > 其他分享 >简单易懂的JSON框架

简单易懂的JSON框架

时间:2024-06-12 09:33:04浏览次数:25  
标签:name 框架 System String JSON println 易懂 public out

  分享一个由本人编写的JSON框架。

  JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性能。支持复杂的泛型类型,数组类型等所有类型。(不支持高版本JDK1.8以上的日期类型,如LocalDate,LocalDateTime,需要你修改源码JsonString类来支持)

  你可以改造源码,让其支持注解序列化和反序列化。扩展一些功能,如JsonPath路径方式解析。当然前提是你感兴趣和有一定的封装能力的话。。。

  下面是使用案例: 

package test;

import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import june.zero.generic.TypeBuilder;
import june.zero.json.JSON;

public class Main {

    public static class User {
        public String name;
        public int age;
        public java.util.Date date;
        public int[] hobbys;
        public String jsonObjectData;
        public String jsonArrayData;
    }
    
    public static class Response<T> {
        public int code;
        public String message;
        public T data;
    }
    
    public static void main(String[] args) {
//        //支持单引号和没有空格名称
//        //String json = "{\"name\":\"张三\",\"age\":33}";//标准JSON格式
//        //String json = "{'name':'张三','age':33}";//单引号的格式
//        //String json = "{name:张三,age:33}";//没有空格名称的格式,不建议使用
        String json = "{'name':'张三','age':33,'date':'2024-06-06 12:12:12','hobbys':[1,2,3],'jsonObjectData':{'a':1,'b':2},'jsonArrayData':['a','b','c']}";
        User user = JSON.fromJSON(json, User.class);
        System.out.println(user.name);//张三
        System.out.println(user.age);//33
        System.out.println(user.date);//2024-06-06 12:12:12.0
        System.out.println(Arrays.toString(user.hobbys));//[1, 2, 3]
        //json对象以String存储起来
        System.out.println(user.jsonObjectData);//{'a':1,'b':2}
        //json数组以String存储起来
        System.out.println(user.jsonArrayData);//['a','b','c']
        
        String json2 = "{'code':1,'message':'查询成功','data':[{'name':'李四','age':44},{'name':'王五','age':55}]}";
        System.out.println("=====1======");
        Type listUserType = new TypeBuilder<Response<List<User>>>() {}.getGenericType();
        System.out.println(listUserType);//test.Main.test.Main$Response<java.util.List<test.Main$User>>
        Response<List<User>> response1 = JSON.fromJSON(json2, listUserType);
        System.out.println(response1.data.get(1).name);//王五
        
        System.out.println("=====2======");
        Type listMapType = new TypeBuilder<Response<List<Map<String,Object>>>>() {}.getGenericType();
        System.out.println(listMapType);//test.Main.test.Main$Response<java.util.List<java.util.Map<java.lang.String, java.lang.Object>>>
        Response<List<Map<String,Object>>> response2 = JSON.fromJSON(json2, listMapType);
        System.out.println(response2.data.get(1).get("name"));//王五
        
        System.out.println("=====3======");
        Type stringType = new TypeBuilder<Response<String>>() {}.getGenericType();
        System.out.println(stringType);//test.Main.test.Main$Response<java.lang.String>
        Response<String> response3 = JSON.fromJSON(json2, stringType);
        System.out.println(response3.data);//[{'name':'李四','age':44},{'name':'王五','age':55}]
    }
    
}

 

 

开源不易,需要鼓励。使用请标明该来源。

因为可能长时间不会更新JAR包,所以我不建议你使用到真实开发环境。代码易懂,你可以自己维护和扩展功能。测试环境使用的是JDK1.7.0_80

源码:https://files.cnblogs.com/files/blogs/824473/Zjson-source.zip?t=1718154818&download=true

jar包:https://files.cnblogs.com/files/blogs/824473/ZJson.zip?t=1718154823&download=true

标签:name,框架,System,String,JSON,println,易懂,public,out
From: https://www.cnblogs.com/JuneZero/p/18237283

相关文章

  • Laravel框架概述、关键组件、使用技巧
    在PHP面试中,Laravel框架是一个经常被提及的话题。以下是对Laravel框架的详细解释,以满足您提出的清晰、分点表示和归纳的要求,并尽量参考了文章中的相关数字和信息。Laravel框架概述定义:Laravel是一个开源的PHPWeb框架,基于MVC(模型-视图-控制器)设计模式。它提供了优雅且富......
  • 一文教你如何手写一个mybatis自定义框架
     本文主要介绍原始jdbc操作有哪些弊端等方面说明持久层框架出现的原因,另一方面介绍如何自己仿写一个mybatis框架。学习完本文相信你对日常使用的mybatis框架有更深的理解!简介说到持久层框架,我们很快能想到hibernate、mybatis。Hibernate是全自动的持久层框架,而mybatis则是半......
  • golang json字符串转结构体
    腐汝 博客园首页新随笔联系订阅管理随笔-168  文章-0  评论-2  阅读- 89497golangjson字符串转结构体 1、不知道结构体类型的情况下funcJsonStringToMap(jsonStrstring)(map[string]interface{},error){//未知值类型......
  • 【Linux系列】掌握jq:高效处理JSON数据的命令行利器
    jq是一个强大的命令行工具,以其简洁的语法和丰富的功能,成为处理JSON数据的首选。本文旨在通过实战示例,让你迅速上手jq,掌握提取信息、美化输出和数据压缩的核心技能。一、安装jq:开启高效之旅首先,确保你的系统中安装了jq。在大多数Linux发行版中,可以通过包管理器安装,例如:#Ubun......
  • Exercise:JSON解析
    练习:利用某些平台(聚合API、百度A、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cISON库对服务器的响应数据进行解析,并输出到终端。/************************************************************************************************......
  • 基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
    #include<netinet/in.h>#include<arpa/inet.h>#include<stdio.h>#include<errno.h>#include<sys/socket.h>#include<netinet/in.h>#include<netinet/ip.h>#include<arpa/inet.h>#include<sys/socket.h&g......
  • http与cJSON练习
    http与cJSON练习/*****************************************************************************************************weather_test.c*练习tcp连接,与http协议,调用服务器接口,实现获取特定城市的天气信息,并用cJSO......
  • 利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJ
    目录题目分析代码结果题目利用聚合API平台的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端分析1.需从源代码网站GitHub或SourceForge代码网站下载cJSON库及阅读下载的README相关手册如何使用cJSON库;2.使用......
  • 网络编程练习题---利用cJSON库对服务器返回的JSON格式数据完成解析
    目录题目注意事项实现代码结果展示相关接口指引题目利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端。注意事项1.预测的日期开始时间为2010-01-012."老黄历"API......
  • cJSON学习及简单应用小结
    JSON简介JSON(JavaScriptObjectNotation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机制造商协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。以下是JSON......