Java <->Json

KTransformers安装笔记 利用docker安装KTransformers 阅读详情
JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

下载地址: http://json-lib.sourceforge.net/
还要需要的第3方包:
org.apache.commons(3.2以上版本)
org.apache.oro
net.sf.ezmorph(ezmorph-1.0.4.jar)
nu.xom

1、List
Java代码
  1. boolean[] boolArray =newboolean[]{true,false,true};      
  2.             JSONArray jsonArray1 = JSONArray.fromObject( boolArray );      
  3.             System.out.println( jsonArray1 );      
  4.            // prints [true,false,true]    
  5.               
  6.             List list = new ArrayList();      
  7.             list.add( "first" );      
  8.             list.add( "second" );      
  9.             JSONArray jsonArray2 = JSONArray.fromObject( list );      
  10.             System.out.println( jsonArray2 );      
  11.            // prints ["first","second"]    
  12.   
  13.             JSONArray jsonArray3 = JSONArray.fromObject( "['json','is','easy']" );      
  14.             System.out.println( jsonArray3 );      
  15.            // prints ["json","is","easy"]     

2、Map
Java代码
  1. Map map = new HashMap();      
  2.           map.put( "name","json" );      
  3.           map.put( "bool", Boolean.TRUE );      
  4.             
  5.           map.put( "int",new Integer(1) );      
  6.           map.put( "arr",new String[]{"a","b"} );      
  7.           map.put( "func","function(i){ return this.arr[i]; }" );      
  8.           JSONObject json = JSONObject.fromObject( map );      
  9.           System.out.println( json );      
  10.          //{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"name":"json","bool":true}  

3、BEAN
Java代码
  1. /**
  2.       * Bean.java
  3.          private String name = "json";   
  4.          private int pojoId = 1;   
  5.          private char[] options = new char[]{'a','f'};   
  6.          private String func1 = "function(i){ return this.options[i]; }";   
  7.          private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];");
  8.      */   
  9. JSONObject jsonObject = JSONObject.fromObject( new JsonBean() );      
  10. System.out.println( jsonObject );      
  11. //{"func1":function(i){ return this.options[i]; },"pojoId":1,"name":"json","options":["a","f"],"func2":function(i){ return this.options[i]; }}    

4、BEANS
Java代码
  1. /**
  2.        * private int row ;
  3.            private int col ;
  4.            private String value ;
  5.        *
  6.        */  
  7. List list = new ArrayList();   
  8.           JsonBean2 jb1 = new JsonBean2();   
  9.           jb1.setCol(1);   
  10.           jb1.setRow(1);   
  11.           jb1.setValue("xx");   
  12.             
  13.           JsonBean2 jb2 = new JsonBean2();   
  14.           jb2.setCol(2);   
  15.           jb2.setRow(2);   
  16.           jb2.setValue("");   
  17.             
  18.             
  19.           list.add(jb1);   
  20.           list.add(jb2);   
  21.             
  22.           JSONArray ja = JSONArray.fromObject(list);   
  23.           System.out.println( ja.toString() );   
  24.          //[{"value":"xx","row":1,"col":1},{"value":"","row":2,"col":2}]  

5、String to bean
Java代码
  1. String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";      
  2. JSONObject jsonObject = JSONObject.fromString(json);      
  3. Object bean = JSONObject.toBean( jsonObject );      
  4. assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean,"name" ) );      
  5.    assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean,"bool" ) );      
  6.    assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean,"int" ) );      
  7.     assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean,"double" ) );      
  8.     assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean,"func" ) );      
  9.    List expected = JSONArray.toList( jsonObject.getJSONArray( "array" ) );      
  10.    assertEquals( expected, (List) PropertyUtils.getProperty( bean, "array" ) );    


Java代码
  1. String json = "{\"value\":\"xx\",\"row\":1,\"col\":1}";      
  2. JSONObject jsonObject = JSONObject.fromString(json);   
  3.    JsonBean2 bean = (JsonBean2) JSONObject.toBean( jsonObject, JsonBean2.class );      
  4.     assertEquals( jsonObject.get( "col" ),new Integer( bean.getCol())   );      
  5.       assertEquals( jsonObject.get( "row" ),new Integer( bean.getRow() ) );      
  6.       assertEquals( jsonObject.get( "value" ), bean.getValue() );    



6 json to xml
1)
JSONObject json = new JSONObject( true );
String xml = XMLSerializer.write( json );

<o class="object" null="true">

2)
JSONObject json = JSONObject.fromObject("{\"name\":\"json\",\"bool\":true,\"int\":1}");
String xml = XMLSerializer.write( json );
<o class="object">
<name type="string">json</name>
<bool type="boolean">true</bool>
<int type="number">1</int>
</o>
<o class="object">
<name type="string">json</name>
<bool type="boolean">true</bool>
<int type="number">1</int>
</o>
3)
JSONArray json = JSONArray.fromObject("[1,2,3]");
String xml = XMLSerializer.write( json );
<a class="array">
<e type="number">1</e>
<e type="number">2</e>
<e type="number">3</e>
</a>

7 、xml to json
<a class="array">
<e type="function" params="i,j">
return matrix[i][j];
</e>
</a>
<a class="array">
<e type="function" params="i,j">
return matrix[i][j];
</e>
</a>

JSONArray json = (JSONArray) XMLSerializer.read( xml );
System.out.println( json );
// prints [function(i,j){ return matrix[i][j]; }]


1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能。

 

2. json-lib 主页 : http://json-lib.sourceforge.net/

 

3.执行环境

     需要以下类库支持

  • jakarta commons-lang 2.5
  • jakarta commons-beanutils 1.8.0
  • jakarta commons-collections 3.2.1
  • jakarta commons-logging 1.1.1
  • ezmorph 1.0.6

4.功能示例

   这里通过JUnit-Case例子给出代码示例

  

复制代码
package com.mai.json;

import  static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.ezmorph.Morpher;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.bean.BeanMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;

import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;

public  class JsonLibTest {

     /*
     *  普通类型、List、Collection等都是用JSONArray解析
     *  
     *  Map、自定义类型是用JSONObject解析
     *  可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值
     *  即{key1:value1,key2,value2......}
     * 
     * 1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)
     *         通过它的getJSONObject(key)可以取到一个JSONObject,--> 转换成map,
     *         通过它的getJSONArray(key) 可以取到一个JSONArray ,
     * 
     * 
     
*/
    
     // 一般数组转换成JSON
    @Test
     public  void testArrayToJSON(){
         boolean[] boolArray =  new  boolean[]{ true, false, true};  
        JSONArray jsonArray = JSONArray.fromObject( boolArray );  
        System.out.println( jsonArray );  
         //  prints [true,false,true]  
    }
    
    
     // Collection对象转换成JSON
    @Test
     public  void testListToJSON(){
        List list =  new ArrayList();  
        list.add( "first" );  
        list.add( "second" );  
        JSONArray jsonArray = JSONArray.fromObject( list );  
        System.out.println( jsonArray );  
         //  prints ["first","second"]  
    }
    
    
     // 字符串json转换成json, 根据情况是用JSONArray或JSONObject
    @Test
     public  void testJsonStrToJSON(){
        JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );  
        System.out.println( jsonArray );  
         //  prints ["json","is","easy"]  
    }
    
    
     // Map转换成json, 是用jsonObject
    @Test
     public  void testMapToJSON(){
        Map map =  new HashMap();  
        map.put( "name", "json" );  
        map.put( "bool", Boolean.TRUE );  
        map.put( "int",  new Integer(1) );  
        map.put( "arr",  new String[]{"a","b"} );  
        map.put( "func", "function(i){ return this.arr[i]; }" );  
          
        JSONObject jsonObject = JSONObject.fromObject( map );  
        System.out.println( jsonObject );  
    }
    
     // 复合类型bean转成成json
    @Test
     public  void testBeadToJSON(){
        MyBean bean =  new MyBean();
        bean.setId("001");
        bean.setName("银行卡");
        bean.setDate( new Date());
        
        List cardNum =  new ArrayList();
        cardNum.add("农行");
        cardNum.add("工行");
        cardNum.add("建行");
        cardNum.add( new Person("test"));
        
        bean.setCardNum(cardNum);
        
        JSONObject jsonObject = JSONObject.fromObject(bean);
        System.out.println(jsonObject);
        
    }
    
     // 普通类型的json转换成对象
    @Test
     public  void testJSONToObject()  throws Exception{
        String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";  
        JSONObject jsonObject = JSONObject.fromObject( json ); 
        System.out.println(jsonObject);
        Object bean = JSONObject.toBean( jsonObject ); 
        assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );  
        assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );  
        assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );  
        assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );  
        assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );  
        System.out.println(PropertyUtils.getProperty(bean, "name"));
        System.out.println(PropertyUtils.getProperty(bean, "bool"));
        System.out.println(PropertyUtils.getProperty(bean, "int"));
        System.out.println(PropertyUtils.getProperty(bean, "double"));
        System.out.println(PropertyUtils.getProperty(bean, "func"));
        System.out.println(PropertyUtils.getProperty(bean, "array"));
        
        List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
         for(Object object : arrayList){
            System.out.println(object);
        }
        
    }
    
    
     // 将json解析成复合类型对象, 包含List
    @Test
     public  void testJSONToBeanHavaList(){
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
//         String json = "{list:[{name:'test1'},{name:'test2'}]}";
        Map classMap =  new HashMap();
        classMap.put("list", Person. class);
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson. class , classMap);
        System.out.println(diyBean);
        
        List list = diyBean.getList();
         for(Object o : list){
             if(o  instanceof Person){
                Person p = (Person)o;
                System.out.println(p.getName());
            }
        }
    }
    
    
     // 将json解析成复合类型对象, 包含Map
    @Test
     public  void testJSONToBeanHavaMap(){
         // 把Map看成一个对象
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";
        Map classMap =  new HashMap();
        classMap.put("list", Person. class);
        classMap.put("map", Map. class);
         // 使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson. class , classMap);
        System.out.println(diyBean);
        
        System.out.println("do the list release");
        List<Person> list = diyBean.getList();
         for(Person o : list){
            Person p = (Person)o;
            System.out.println(p.getName());
        }
        
        System.out.println("do the map release");
        
         // 先往注册器中注册变换器,需要用到ezmorph包中的类
        MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
        Morpher dynaMorpher =  new BeanMorpher( Person. class,  morpherRegistry);  
        morpherRegistry.registerMorpher( dynaMorpher );  
        
        
        Map map = diyBean.getMap();
         /* 这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象 */
        System.out.println(map);
      /*输出:
        {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
          {name=test1}
        ], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
          {name=test2}
        ]}
      */
        List<Person> output =  new ArrayList();  
         for( Iterator i = map.values().iterator(); i.hasNext(); ){  
             // 使用注册器对指定DynaBean进行对象变换
           output.add( (Person)morpherRegistry.morph( Person. class, i.next() ) );  
        }  
        
         for(Person p : output){
            System.out.println(p.getName());
        /*输出:
          test1
          test2
        */
        }
        
    }
    
    
    
}

 

5.下面提供上面例子所需的资源,包括jar包和代码

/Files/mailingfeng/json-lib/json-lib用例所需jar包和java类.rar


深入Luckfox Pico的Web界面:从Angular前端到CGI后端的RV1106 IPCWeb全栈解析 本文深入解析了基于瑞芯微RV1106芯片的Luckfox Pico设备上,IPCWeb全栈解决方案的架构与部署。详细介绍了如何通过SDK编译配置,将现代Angular前端框架与高效的C++ CGI后端结合,并利用nginx和FastCGI在嵌入式环境中构建稳定、高性能的Web管理界面,为物联网设备开发提供了完整的实战参考。 阅读详情

相关推荐

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1152

Java解析Json

一、   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。  Json建构于两种结构:      1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash

The Life with iOS 1205

【自由谈】城域网IPv6过渡技术——MAP技术(1)

在IPv4向IPv6网络演进的浪潮中,存在着两对主要矛盾的较量,一对是IPv4地址短缺和IPv4业务蓬勃发展之间的矛盾,另一对是IPv6海量的地址空间和IPv6应用的匮乏之间的矛盾。同时两对矛盾又互相制约,IPv4地址共享机制似乎又减缓了IPv6产业链的发展,IPv6产业链的不断发展似乎又在考验着IPv4地址共享机制的部署规模。MAP成为目前兼顾IPv4和IPv6的4voer6场景中最为关注的技术。

韩立金自由谈 3020

【工具】html2json

     收录一个html2json的工具:   https://github.com/welefen/html2json

Focus-Fe 287

NXP ChessDE的安装和激活

如果客户申请的是试用版,那么一份为期 30 天的 License 将会发送申请人的账号或邮箱中,客户使用该文件进行安装即可。② 将“VENDOR snpslmd /path/to/snpslmd”中的“/path/to/snpslmd”替换成 snpslmd.exe 实际存放路径(位于 SCL 安装目录下的 win32\bin 文件夹中,默认安装的情况下就是“VENDOR snpslmd C:\Synopsys\SCL\<version>\win32\bin\snpslmd.exe”)。

weixin_47351160的博客 2042

医学图像分割实战:基于TransUNet训练自己的眼底硬渗出物数据集(附完整代码)

本文详细介绍了基于TransUNet的眼底硬渗出物分割实战指南,涵盖数据预处理、模型调优、训练策略及性能优化等关键环节。通过代码复现和实验对比,展示了TransUNet在医学图像分割中的优势,为糖尿病视网膜病变的早期诊断提供技术支持。

weixin_42524708的博客 361

json浅谈

     在FF,Chrome,opera,safari,ie9,ie8这些浏览器存在一个JSON对象。       这个对象包含stringify()和parse()方法。       1. JSON.stringify(obj)将JSON转为字符串。         2. JSON.parse(string)将字符串转为JSON格式。       JSON对象是在ECMAS...

Focus-Fe 172

利用Matlab绘制非线性系统相图:从理论到实践

本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。

yhn456789的博客 905

JS 之 onfocus事件和onblur事件

在我们平时开发网站中,我们一定会经常遇到onfocus和onblur这两个事件,今天就给大家简单介绍一下这两个事件: onfocus 事件在对象获得焦点时发生。 function setStyle(x) { document.getElementById(x).style.background="yellow" } 请输入: 当文本框得到焦点的时候,触发

等一个故事 1万+

Windowns下Git环境配置-命令行方式

文章目录一、配置Git1.1 下载Git并安装1.2 配置本地Git用户名和邮箱1.3 注册GitHub二、生成本地公钥,放到GitHub上-SSH Key2.1 生成本地公钥命令2.2 查看生成的公钥2.3 在GitHub放上公钥并测试连通性三、创建项目实操四、可能出现的问题4.1.push不成功4.2.提示SSL的问题4.3.域名不能解析的问题4.4.如果github连接不上的问题 一、配置Git 1.1 下载Git并安装 Git官网 默认安装,根据需要修改安装路径 1.2 配置本地Git用户名和邮箱

学习工作笔记 1135

Visual SLAM算法笔记

最近在学习SLAM算法,这里作为阅读笔记记录和总结一下。对经典的单目SLAM/VO算法做了摘要和总结,比如Nister VO、MonoSLAM、PTAM、ORB-SLAM、LSD-SLAM、SVO、DSO等,对几个单目和IMU的融合算法也做了简单总结,比如MSCKF、OKVIS、IMU-Preintegration等。

MulinB的技术博客 3万+

Js中的onblur和onfocus事件

html页面中,诸如按钮、文本框等可视元素都具有拥有和失去焦点的事件,这些事件在响应鼠标或键盘动作时都可激发预设的操作。本文以文本框获得和失去焦点为例简单讲解onfocus和onblur的应用。 一. onfocus(获得焦点事件) 当一个文本框获得焦点时,它里面的文本就像“好123”网站上的百度搜索输入框那样全部被自动选中,这样的操作可以利用onfocus来实现。 以下的文本框,当鼠标指针

王伯仙的博客 11万+

【QMIX】一种基于Value-Based多智能体算法

文章目录1. QMIX 解决了什么问题(Motivation)2. QMIX 怎样解决团队收益最大化问题(Method)2.1 算法大框架 —— 基于 AC 框架的 CTDE(Centralized Training Distributed Execution) 模式 QMIX 是一种基于 Value-Based 的多智能体强化学习算法(MARL),其基本思想来源于 Actor-Critic 与 DQN 的结合。使用中心式学习(Centralized Learning)分布式执行(Distributed

qq_38638132的博客 9859

java中字符串/java对象<-->JSON对象互转

String字符串与JSON的转换     (1)Object/String-->JSON(org.json.JSONObject方式)              JSONObject json = new JSONObject(result);              int versionCode = json.getInt("code");              String

rwb0123的专栏 365

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaScript入门<3>JSON

一)JSON概述 1、什么是JSON? 2、如是使用JSON? 二)案例:批量提交数据和下拉框板式日历

飞翔的心 317

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

<项目一>json拼接

完成效果: 实现步骤:

MISSLilyliu的专栏 406

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java-->Json解析网页数据

--> 官方解析jar包:链接:http://pan.baidu.com/s/1pKDnXKv 密码:694d --> 离线Json格式检测工具:链接:http://pan.baidu.com/s/1eSHkrOe 密码:ju95 --> HttpUtil 工具类 1 package com.dragon.java.jsonwebdata; 2 3 im...

weixin_30725467的博客 229

java json 本身_转载java<-->json

publicclassUser{privateStringusername;privateStringpassword;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPa...

weixin_39727706的博客 54

Android==>JSON解析

public class JsonUtil { /** * 获取"数组形式"的JSON数据, 数据形式:[{"id":1,"name":"小名"},{"id":2,"name":"小丽"}] *  * @param path *            网页路径 * @return 返回List * @throws Exception */ public static St

Center.wei的专栏 598

java html页面解析json_Java-->Json解析网页数据

1 packagecom.dragon.java.hwgsonparse;23 public classDetail {4 private intid;5 privateString city;6 privateString county;7 privateString date;8 privateString day_conditon;9 priv...

weixin_39659748的博客 302

JSON 日期格式处理(JAVA->JSON)

1 public class JsonDateValueProcessor implements JsonValueProcessor { 2 private String format = "yyyy-MM-dd"; 3 4 public JsonDateValueProcessor() { 5 super(); 6 }...

weixin_30813225的博客 523

java Object<->Json use jackson-core-asl.jar

[b]json-->Object[/b] [code="java"] import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; imp...

lan_13217的专栏 166

带日期的bean转为json(bean->JSON)

示例代码: JsonBean bean = new JsonBean();bean.setName("NewBaby");bean.setAge(1);bean.setBorn(new Date());jo = JSONObject.fromObject(bean);System.out.println("bean->json:" + jo.toString()); 打印结果:...

164

map->json->String->byte[]

import net.sf.json.JSONObject; JSONObject jsonObject = JSONObject.fromObject(map); String msgss=jsonObject.toString(); byte[] responB = msgss.getBytes(“utf-8”);

张枫大师哥的优快云博客 410

ajax中json和文本的区别,json格式字符串<-->json对象 【ajax_responseText】重点

JSON.parse(string)JSON.Stringify(object)document.getElementById("id").value=jsonObj//不可以 打印出来的是objectdocument.getElementById("id").value=array//可以 打印出来的是逗号分隔的字符串所以用value存值,需要先转为字符串,ajax也是同理传值也...

weixin_29469195的博客 300

python-->json和pickle模块

目录 一、json和pickle模块 1.1 序列化 1.2 json 1.3 pickle 一、json和pickle模块 1.1 序列化 把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其...

disui7868的博客 137
上一篇: box2d_用户手册
下一篇: OpenGL入门
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值