Java 与 Json的互相转换 2

本文详细介绍了使用Java解析JSON数据的过程,包括JSON到Java对象的转换方法、JSON对象的属性获取、反序列化为JavaBean等核心操作。通过提供实例代码,深入探讨了JSON数据结构与Java数据结构之间的映射关系,以及如何灵活运用JSON-LIB包进行复杂数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   这几天一直在做Java解析Json数据的一个项目,因为初识json,所以很多东西都是有着懵懂的认识。这里写下我解析时遇到的问题和收获。 我解析json时用到的是json-lib包。下载地址:http://json-lib.sourceforge.net。用这个包时,还要用到其他几个支持包:commons-lang.jar、commons-logging.jar,commons-beanutils.jar、xom-1.0-2005-01-05.jar、ezmorph-1.0.1.jar,以上包都可在http://json-lib.sourceforge.net下载。 先给出2个简单的例子。1.java2json样例:public class testJson{ public static void main(String[] args) { String json = "{\"name\":\"reiz\"}"; JSONObject jsonObj = JSONObject.fromObject(json); String name = jsonObj.getString("name"); jsonObj.put("initial", name.substring(0, 1).toUpperCase()); String[] likes = new String[] { "JavaScript", "Skiing", "Apple Pie" }; jsonObj.put("likes", likes); Map ingredients = new HashMap(); ingredients.put("apples", "3kg"); ingredients.put("sugar", "1kg"); ingredients.put("pastry", "2.4kg"); ingredients.put("bestEaten", "outdoors"); jsonObj.put("ingredients",ingredients); System.out.println(jsonObj); }} 输出结果:{"name":"reiz","initial":"R","likes":["JavaScript","Skiing","Apple Pie"],"ingredients":{"apples":"3kg","pastry":"2.4kg","bestEaten":"outdoors","sugar":"1kg"}}java2json的资料网上很多,此不具体研究。 2.javafromjson例子:public class testJson{ public static void main(String[] args) { String json = "{x:'1',y:'2',userId:'112',element:[{id:'123',name:'haha'},{id:'456',name:'hehe'}]}"; JSONObject obj = JSONObject.fromObject(json); String x = obj.getString("x"); String userid = obj.getString("userId"); System.out.println("x is:" + x); System.out.println("userId is:" + userid); // 数组array结果:[{"id":"123","name":"haha"},{"id":"456","name":"hehe"}] JSONArray jsonArray = obj.getJSONArray("element"); for (int i = 0; i < jsonArray.size(); i++) { System.out.println("element " + i + " :" + jsonArray.get(i)); } }} 输出:x is:1userId is:112element 0 :{"id":"123","name":"haha"}element 1 :{"id":"456","name":"hehe"}从上例可以看出,若取某一数组,可用json.get(i)取出。若想继续取出数组中第i个元素内的某一个值,如取出数组第一个元素中id的值,可用(JSONObject)json.get(0).getInt("id")取出,为了看出细节,我们设取第二个元素中name的值,代码如下: JSONObject obj2 = JSONObject.fromObject(array.get(1)); System.out.println(obj2.getString("name")); 输出结果为 hehe 可以看出一般步骤为:将要目标字符串转为JSON对象(JSONObject.fromObject()方法),再根据相应方法取出该对象中需要的值。 如果我们要将json反序列化为javabean呢? String jsonStr = "{x:1,\"userId\":\"112\",element:[{id:'123',name:'haha'},{id:'456',name:'hehe'}]}"; Map<String,Class<?>> m = new HashMap<String,Class<?>>(); m.put("x", Integer.class); m.put("userId", String.class); m.put("element",Element.class); Jsontobean myBean = (Jsontobean)JSONObject.toBean( JSONObject.fromObject(jsonStr), Jsontobean.class, m ); System.out.println("x: " + myBean.getX()); System.out.println("userId: " + myBean.getUserId()); for(Element e : myBean.getElement()){ System.out.println(e.getId() +"," + e.getName()); } public class Jsontobean { private int x = 1; private String userId = "112"; private List element; public int getX() { return x; } public void setX(int x) { this.x = x; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public List getElement() { return element; } public void setElement(List element) { this.element = element; } } public class Element { private int id; private String name; private Element source; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setSource(Element source) { this.source = source; } public Element getSource() { return source; } public String toString(){ return "" + id + "," + name; }}输出:x: 1userId: 112123,haha456,hehe-------附:jsontojava对象1)JSONObject to DynaBean所谓动态bean即是java运行的时候根据情况创建的,而不是程序员已经写好了的Bean。JsonLib会自动根据Json格式数据创建字段,然后创建一个包含这些字段的Object。代码片段:String str = "{'string':'JSON', 'integer': 1, 'double': 2.0, 'boolean': true}"; JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON( str ); DynaBean bean = (DynaBean) JSONSerializer.toJava( jsonObject ); assertEquals( "JSON", bean.get("string") ); assertEquals( new Integer(1), bean.get("integer") ); assertEquals( new Double(2.0), bean.get("double") ); assertEquals( Boolean.TRUE, bean.get("boolean") ); 2)JSONObject to JavaBeanJSONLIB在转换的时候会自动查找关系,比如子类和父类例如JSON数据源 String s = "{'shopList':[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'}, {name:'显卡 类型',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器 ',property:'p5'},{name:'内存',property:'p6'},{name:'型号',property:'p7'}, {name:'货号',property:'p8'},{name:'品牌',property:'p9'}]}"; 存入Map map.put("shopList", Shop.class); ShopList shopList = (ShopList) JSONObject.toBean(JSONObject.fromObject(s), ShopList.class, map);JSONObject.toBean()方法的三个参数分别表示数据源对应的JSON对象,转化后的对象ShopList和数据源map。这种方法和动态转换的区别在于,动态转换仅仅只是转为Object,而静态转换是转换为已经定义过的实体类,会自动映射。JSONObject.toBean()的参数介绍。
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外, v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值