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.pswp.cn/news/452201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452201.shtml
英文地址,請注明出處:http://en.pswp.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調用--在視…