Java构造和解析Json数据的两种方法详解一

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。

      用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二

一、介绍

      JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究。

二、下载jar依赖包:可以去这里下载

 

三、基本方法介绍

1. List集合转换成json方法

 

List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );

 

2. Map集合转换成json方法

复制代码
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 json = JSONObject.fromObject(map);
复制代码

3. Bean转换成json代码

JSONObject jsonObject = JSONObject.fromObject(new JsonBean());

4. 数组转换成json代码

boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);

5. 一般数据转换成json代码

JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );

6. beans转换成json代码

复制代码
List list = new ArrayList();
JsonBean2 jb1 = new JsonBean2();
jb1.setCol(1);
jb1.setRow(1);
jb1.setValue("xx");JsonBean2 jb2 = new JsonBean2();
jb2.setCol(2);
jb2.setRow(2);
jb2.setValue("");list.add(jb1);
list.add(jb2);
JSONArray ja = JSONArray.fromObject(list);
复制代码

四、演示示例

这里以基本的几个常用方法进行测试

复制代码
package com.json;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** 使用json-lib构造和解析Json数据* * @author Alexia* @date 2013/5/23**/
public class JsonTest {/*** 构造Json数据* * @return*/public static String BuildJson() {// JSON格式数据解析对象JSONObject jo = new JSONObject();// 下面构造两个map、一个list和一个Employee对象Map<String, String> map1 = new HashMap<String, String>();map1.put("name", "Alexia");map1.put("sex", "female");map1.put("age", "23");Map<String, String> map2 = new HashMap<String, String>();map2.put("name", "Edward");map2.put("sex", "male");map2.put("age", "24");List<Map> list = new ArrayList<Map>();list.add(map1);list.add(map2);Employee employee = new Employee();employee.setName("wjl");employee.setSex("female");employee.setAge(24);// 将Map转换为JSONArray数据JSONArray ja1 = JSONArray.fromObject(map1);// 将List转换为JSONArray数据JSONArray ja2 = JSONArray.fromObject(list);// 将Bean转换为JSONArray数据JSONArray ja3 = JSONArray.fromObject(employee);System.out.println("JSONArray对象数据格式:");System.out.println(ja1.toString());System.out.println(ja2.toString());System.out.println(ja3.toString());// 构造Json数据,包括一个map和一个Employee对象jo.put("map", ja1);jo.put("employee", ja2);System.out.println("\n最终构造的JSON数据格式:");System.out.println(jo.toString());return jo.toString();}/*** 解析Json数据* * @param jsonString Json数据字符串*/public static void ParseJson(String jsonString) {// 以employee为例解析,map类似JSONObject jb = JSONObject.fromObject(jsonString);JSONArray ja = jb.getJSONArray("employee");List<Employee> empList = new ArrayList<Employee>();// 循环添加Employee对象(可能有多个)for (int i = 0; i < ja.size(); i++) {Employee employee = new Employee();employee.setName(ja.getJSONObject(i).getString("name"));employee.setSex(ja.getJSONObject(i).getString("sex"));employee.setAge(ja.getJSONObject(i).getInt("age"));empList.add(employee);}System.out.println("\n将Json数据转换为Employee对象:");for (int i = 0; i < empList.size(); i++) {Employee emp = empList.get(i);System.out.println("name: " + emp.getName() + " sex: "+ emp.getSex() + " age: " + emp.getAge());}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubParseJson(BuildJson());}}
复制代码

运行结果如下

 

五、与org.json比较

      json-lib和org.json的使用几乎是相同的,我总结出的区别有两点:

      1. org.json比json-lib要轻量得多,前者没有依赖任何其他jar包,而后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件

      2. json-lib在构造bean和解析bean时比org.json要方便的多,json-lib可直接与bean互相转换,而org.json不能直接与bean相互转换而需要map作为中转,若将bean转为json数据,首先需要先将bean转换为map再将map转为json,比较麻烦。

      总之,还是那句话—适合自己的才是最好的,大家要按需选取使用哪种方法进行解析。最后给大家介绍两款解析Json数据的工具:一是在线工具JSONEdit(http://braincast.nl/samples/jsoneditor/);另一个是Eclipse的插件JSON Tree Analyzer,都很好用,推荐给大家使用! 

 

转载出自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象方法开发的方法

面向对象分析首要的工作&#xff0c;是建立问题域的对象模型。 这个模型描述了现实世界中的“类与对象”以及它们之间的关系&#xff0c;表示了目标系统的静态数据结构。静态数据结构对应用细节依赖较少&#xff0c;比较容易确定。因此&#xff0c;用面向对象方法开发绝大多数…

程序员编程需要多少个小时?

Michael Arrington曾发表一篇博文说&#xff0c;创业者必须加倍的努力工作&#xff0c;甚至不惜趴在办公桌上睡觉&#xff0c;这样才能成功。对此&#xff0c;我并不赞同其观点&#xff0c;我看了很多评论都是关于这样工作会适得其反&#xff0c;不但没有获得成功&#xff0c;相…

事务以及@Transcational注解

文章目录1.事务的概念2.事务的四个特性3.关于Transcational注解的理解4.使用场景5.举例6.编程式事务管理7.相关知识1.事务的概念 事务&#xff0c;是指作为单个逻辑工作单元执行的一系列操作&#xff0c;结果只有成功和失败两种&#xff0c;要么全部成功(全部提交)&#xff0c…

提高代码复用率

由于现在的互联网企业业务比较繁忙&#xff0c;导致产品狗不停地提需求&#xff0c;还总是改来改去&#xff0c;最后留给程序猿的时间少之又少。程序猿也不是吃素的&#xff0c;干脆直接copy一下代码随便搞一下实现功能就行&#xff0c;也谈不上所谓的精心设计了。这样的确是缩…

java 对 redis 的基本操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、server端安装 1、下载https://github.com/MSOpenTech/redis 可看到当前可下载版本&#xff1a;redis2.6 2、安装 1&#xff09;解压…

JsRender 前端渲染模板常用API学习

JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的&#xff0c;使用的情况有以下几种。 把html字符串编译编译成模板获取使用script标签声明的模板&#xff0c;并返回一个模板对象把html字符串或者在script标签中声明的模板注册成命名模板获取之前就…

状态图

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的&#xff1a;研究类、角色、子系统、或组件的复杂行为。

我身边的手机应用开发者

手机应用火了&#xff0c;我身边的一位朋友(A君)也投身到开发者行列&#xff0c;不过他还算聪明并没有辞掉工作专做手机应用软件开发。 其原因在于他们领导打算做一款自己的应用软件&#xff0c;正当A君愁到底是做IOS平台还是Android平台的时候&#xff0c;领导说&#xff1a;…

学成在线--16.添加课程计划

文章目录一.需求分析二.API接口三.后端1.Dao2.Service3.Controller4.测试四.前端1.页面原型说明1&#xff09;添加按钮2&#xff09;视图部分3&#xff09;在数据模型中添加如下变量4&#xff09;定义表单提交方法和重置方法2.Api调用1&#xff09;定义 api方法2&#xff09;调…

mac 下的操作

nodejs在Mac下的卸载 在 node 官网上下载的安装包&#xff0c;用安装包安装的node.应该可以用一下命令行卸载&#xff1a; 在终端输入以下命令&#xff1a; sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 删除/usr/local/lib中的…

理解 maven 的核心概念

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 本文以类图的方式&#xff0c;介绍 maven 核心的 12 个概念及相互之间的关系。 Table of Contents 1 maven管理的目标&#xff1a;工程…

时间跟踪图

事件跟踪图实质上是扩充的脚本&#xff0c;可以认为事件跟踪图是简化的UML顺序图。

1088. [SCOI2005]扫雷Mine【网格DP】

Description 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷&#xff0c;要你根据一些信息找出雷来。万圣节到了 &#xff0c;“余”人国流行起了一种简单的扫雷游戏&#xff0c;这个游戏规则和扫雷一样&#xff0c;如果某个格子没有雷&#xff0c;那么它里面的数…

spring data jpa和mybatis的不同

使用spring data JPA和mybatis都是用来访问数据库&#xff0c;但他们的分工不同&#xff1a; 1.spring data jpa默认使用hibernate作为ORM实现&#xff0c;是spring 提供的一套jpa接口&#xff0c;使用spring data jpa主要完成一些简单的增删改查功能。 2.对于复杂的查询功能会…

函数式编程很难,这正是你要学习它的原因

很奇怪不是&#xff0c;很少有人每天都使用函数式编程语言。如果你用Scala&#xff0c;Haskell&#xff0c;Erlang&#xff0c;F#或某个Lisp方言来编程&#xff0c;很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python&#xff0c;Ruby&#xff0c;Java或C#等面…

函数依赖

设R(U)是一个属性集U上的关系模式&#xff0c;X和Y是U的子集。若对于R(U)的任意一个可能的关系r&#xff0c;r 中不可能存在两个元组在X上的属性值相等&#xff0c; 而在Y上的属性值不等&#xff0c; 则称“X函数确定Y”或“Y函数依赖于X”&#xff0c;记作X→Y。 X→Y&#x…

Java面试——线程池

1、类比介绍 假如有一个工厂&#xff0c;工厂里面有10个工人&#xff0c;每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的&#xff0c;来了任务就分配给空闲的工人做&#xff1b; 当10个工人都有任务在做时&#xff0c;如果还来了任务&#xff0c;就把任务进…

C#关键字的使用

params object[] 用于函数多参数的定义public static void Write(string format, params object[] arg);explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如&#xff0c;在下面的示例中&#xff0c;此运算符将名为 Fahrenheit 的类转换为名为 Ce…

maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 参考&#xff1a;http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 还有一篇转载文章…

学成在线--17.我的课程

文章目录一.需求分析二.API接口三.PageHelper1.PageHelper介绍2.添加依赖3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.测试Dao五.Service六.Controller七.前端1.创建course_list.vue2.路由3.定义API方法4.前端视图course_list.vue详解1&#xff09;API调用--在视…