- 浏览: 1541212 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (225)
- JAVA (27)
- Spring (49)
- Linux (51)
- JavaScript (8)
- Scrum (23)
- IDE (2)
- JSON (2)
- Solr (0)
- Webharvest (0)
- Hibernate (8)
- 杂谈 (3)
- Windows 7 (4)
- 持续集成 (23)
- tomcat (3)
- Android (1)
- SpringSecurity (11)
- Maven (9)
- jotm (3)
- C3P0 (1)
- Active Directory (2)
- cas (1)
- JQuery (2)
- ajax (1)
- plsql (2)
- nginx (4)
- apache (1)
- thrift (7)
- python (3)
- oracle (4)
- php (2)
- redis (1)
- fedora (1)
- windows7 (0)
- SVN (1)
- NFS (1)
- SAMBA (1)
- Atomikos (1)
- apache-poi (1)
- mysql (2)
- vncserver (1)
- mac (2)
- firefox (1)
- JIRA (1)
- p6spy (1)
- git (1)
- github (1)
- gitlab (1)
- gogs (1)
- Druid (1)
- MyBatis (1)
- docker (8)
- zabbix (1)
最新评论
-
lialatd:
您好,我用您的方法通过java api往jira系统中添加is ...
JIRA REST API ---- JAVA -
sprcen945:
可以了,是因为没加intercept-url 的拦截, 尼玛, ...
SpringSecurity3.X--Cas client 配置 -
sprcen945:
请问为什么我配了security.xml后切入点不起作用(之前 ...
SpringSecurity3.X--Cas client 配置 -
linxingyul:
根据楼主的代码 继承了WebMvcConfigurationS ...
SpringMVC4零配置--Web上下文配置【MvcConfig】 -
java_老头:
MvcConfig.java的FilterType.ANNOT ...
SpringMVC4零配置--Web上下文配置【MvcConfig】
一、JSON 是什么?
JSON 的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。
JSON 与XML 具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是JSON 比
XML 数据传输的有效性要高出很多。JSON 完全独立与编程语言,使用文本格式保存。
JSON 数据有两种结构:
• Name-Value 对构成的集合,类似于Java 中的Map。
• Value 的有序列表,类似于Java 中的Array。
一个JSON 格式的数据示例:
{
"Name": "Apple",
"Expiry": "2007/10/11 13:54",
"Price": 3.99,
"Sizes": [
"Small",
"Medium",
"Large"
]
}
更多关于JSON 数据格式的说明参看JSON 官方网站:http://www.json.org(中文
内容参看:http://www.json.org/json-zh.html)
二、通过java来创建JSON对象
1.引入jar包
我这里使用的是json-lib-2.3-jdk15.jar,下载地址:http://sourceforge.net/projects/json-lib/files/
Json-lib requires (at least) the following dependencies in your classpath:
jakarta commons-lang 2.4
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1.1
ezmorph 1.0.6
2.重要的对象及方法
1)JSONObject:JSON对象{}。
2)JSONArray:JSON数组对象,[{},{}]。
3)fromObject(object):将对象转换为JSON对象。
4)JSONObject.accumulate(key,value):向JSONObject中增加JSON数据,可以重复。
5)element(key,value):向JSON对象中增加JSON数据,如果重复后一个会替换前一个。
6)toString(i,i):将JSON对象转换为字符串,如果包含参数,是将其美化后输出。
以下是一个servlet输出JSON的例子:
package com.netqin.function.demo.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import com.netqin.function.demo.model.People;
import com.netqin.function.demo.model.Phone;
public class JsonServlet extends HttpServlet{
private static final String CONTENT_TYPE = "text/plain; charset=UTF-8";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.StringToJson(req, response);
// this.MapToJson(req, response);
// this.BeanToJson(req, response);
// this.ListToJson(req, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(req, resp);
}
/**
* 描述 : <输出>. <br>
*<p>
* @param response
* @param content
* @throws IOException
*/
private void print(HttpServletResponse response,String content) throws IOException{
response.setContentType(CONTENT_TYPE);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter write = response.getWriter();
write.print(content);
write.close();
}
--------------------------------------------------------------------------------
/**
* 描述 : <将字符串或数组转换为JSON>. <br>
*<p>
如果字符串本身符合json格式,可以使用如下方法,将json字符串转换为json对象
String str = "{'check': '1'}";
JSONObject resultJSON = JSONObject.fromObject(str);
获得json对象的内容,各种get方法
String check = resultJSON.getString("check");
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
// @SuppressWarnings("unused")
private void StringToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = new JSONObject();
try {
resultJSON.accumulate("name", "Violet")
.accumulate("occupation", "developer")
.accumulate("age", new Integer(22))
.accumulate("array", new int[] { 1, 2, 3 })
.accumulate("muliArray","[{'type': '你好', 'value': 'kelly@seankelly.biz'},{'type': 'home', 'pref': 1, 'value': 'kelly@seankelly.tv'}]");
//System.out.println(resultJSON.toString(1,1));
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
输出结果:
{
"name": "Violet",
"occupation": "developer",
"age": 22,
"array": [
1,
2,
3
],
"muliArray": [
{
"type": "你好",
"value": "kelly@seankelly.biz"
},
{
"type": "home",
"pref": 1,
"value": "kelly@seankelly.tv"
}
]
}
--------------------------------------------------------------------------------
/**
* 描述 : <将Map转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
@SuppressWarnings("unchecked")
private void MapToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = null;
Map map = new HashMap(15);
try {
map.put("name", "hanqf");
map.put("age", 28);
map.put("phone", "{home:135,busi:139}");
resultJSON = JSONObject.fromObject(map);
//System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
输出结果:
{
"phone": "{home:135,busi:139}",
"age": 28,
"name": "hanqf"
}
--------------------------------------------------------------------------------
/**
* 描述 : <JavaBean转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
private void BeanToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = null;
People people = new People();
Phone phone = new Phone("135","138");
try {
people.setPhone(phone);
resultJSON = JSONObject.fromObject(people);
//System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
public class People{
String name;
int age;
Phone phone = new Phone();
setter and getter
…………………………
}
public class Phone{
String home;
String busi;
setter and getter
…………………………
}
输出结果:
{
"age": 0,
"name": "",
"phone": {
"busi": "138",
"home": "135"
}
}
--------------------------------------------------------------------------------
/**
* 描述 : <List转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
private void ListToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONArray jsonArray = null;
People people = null;
Phone phone = null;
List<People> list = new ArrayList<People>();
try {
for(int i =0;i<3;i++){
people = new People();
phone = new Phone("135"+i,"138"+i);
people.setAge(i);
people.setPhone(phone);
list.add(people);
}
jsonArray = JSONArray.fromObject(list);
//System.out.println(jsonArray.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, jsonArray.toString(1,1));
}
}
输出结果:
[
{
"age": 0,
"name": "",
"phone": {
"busi": "1380",
"home": "1350"
}
},
{
"age": 1,
"name": "",
"phone": {
"busi": "1381",
"home": "1351"
}
},
{
"age": 2,
"name": "",
"phone": {
"busi": "1382",
"home": "1352"
}
}
]
--------------------------------------------------------------------------------
三、Ajax调用
以<将字符串或数组转换为JSON>. 为例,
{
"name": "Violet",
"occupation": "developer",
"age": 22,
"array": [
1,
2,
3
],
"muliArray": [
{
"type": "你好",
"value": "kelly@seankelly.biz"
},
{
"type": "home",
"pref": 1,
"value": "kelly@seankelly.tv"
}
]
}
jsp中主要的代码如下:
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script type="text/javascript">
jQuery(function($){
$("#onebut").click(function(){
$.getJSON("http://localhost:8080/points/json.do",function(data){
$("#one").html("");
$("#one").append(data.name);
$("#one").append("##");
$("#one").append(data.age);
$("#one").append("##");
$("#one").append(data.array[0]);
//$("#one").append("##");
//$("#one").append(data.muliArray[0].type);
$.each(data.muliArray,function(i,item){
$("#one").append("##");
$("#one").append(item.type);
});
});
});
});
</script>
<button id="onebut">onebut</button>
<div id="one"></div>
点击"onebut”按钮后,页面上显示如下:
Violet##22##1##你好##home
--------------------------------------------------------------------------------
四、JSON进阶
1.再来看几个重要的对象和方法
1)JSON:JSON对象的顶级接口,JSONObject,JSONArray都实现了该接口
2)JSONSerializer:JSON串行化对象
3)JSONSerializer.toJSON(object):将对象串行化为JSON
4)JSONSerializer.toJava(json):将JSON转换为对象
5)MorphDynaBean:JSONSerializer.toJava(json)后的值默认为MorphDynaBean
6)XMLSerializer:JSON转换为xml对象
7)xMLSerializer.write(json):将JSON对象转换为xml
8)xMLSerializer.read(xml):将xml转换为JSON对象
2.实例
1)json转map
JSONObject resultJSON = JSONObject.fromObject(map);
Map mapp = (Map)JSONObject.toBean(resultJSON, Map.class);
System.out.println(mapp.get("name"));
--------------------------------------------------------------------------------
2)json转JavaBean
JSONObject resultJSON =JSONObject.fromObject(people);
People pp = (People)JSONObject.toBean(resultJSON, People.class);
System.out.println(pp.getPhone().getBusi());
--------------------------------------------------------------------------------
3)json转list
JSONObject resultJSON = JSONConvert.generate(list);
Map mapp = (Map)JSONObject.toBean(resultJSON, Map.class);
List<MorphDynaBean> list2 = (List<MorphDynaBean>)mapp.get("root");
for(MorphDynaBean pp : list2){
System.out.println(((MorphDynaBean)pp.get("phone")).get("busi"));
}
说明:
为什么没有使用JSONArray.toArray(jsonArray)或JSONArray.toCollection(jsonArray)呢?
笔者在使用过程中发现其在转换时不能对people.phone对象赋值,也就是说不能嵌套赋值,所以才改用map加MorphDynaBean的方式,也许是笔者没有搞明白,希望高手指点。
这里提供一个JSONConvert工具类,方便bean对象、map和list转换为JSONObject ,如下:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
public class JSONConvert {
public static JSONObject generate(List list) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("totalProperty", list.size());
map.put("root", list);
return JSONObject.fromObject(map);
}
public static JSONObject javabean2json(Object object) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("success", true);
map.put("data", object);
return JSONObject.fromObject(map);
}
public static JSONObject objectcollect2json(List list, String total) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("totalProperty", total);
map.put("root", list);
return JSONObject.fromObject(map);
}
}
--------------------------------------------------------------------------------
4)json转xml
需要引入该包:xom-1.1.jar,下载地址:http://repo1.maven.org/maven2/xom/xom/1.1/
XMLSerializer xmlSe = new XMLSerializer();
System.out.println("json=="+resultJSON.toString(1, 1));
String xml = xmlSe.write(resultJSON);
System.out.println("xml=="+xml);
输出结果:
json==
{
"age": 0,
"name": "",
"phone": {
"busi": "139",
"home": "135"
}
}
xml==
<?xml version="1.0" encoding="UTF-8"?>
<o>
<age type="number">0</age>
<name type="string"/>
<phone class="object">
<busi type="string">139</busi>
<home type="string">135</home>
</phone>
</o>
--------------------------------------------------------------------------------
5)json的特殊字符处理
由于json的格式要求,“:”“{}”,“[]”,“\”等等都是json的特定字符,
所以如果在name或value中出现了这些字符就会造成json解析异常,
比如:
resultJSON.accumulate("phone", "{home:135,busi:139}");
在页面上的显示结果如下:
{
"phone": {
"home": "135",
"busi": 139
}
}
如果json修改成如下形式:
resultJSON.accumulate("phone", "{home:135:11{[,busi:139}");
在页面上的显示结果如下:
{
"phone": "{home:135:11{[,busi:139}",
}
此时,json会将"{home:135:11{[,busi:139}"都作为phone的值,而不会再向下解析
所以,在遇到这样的问题时只要将value用引号括起来就行了,如下:
resultJSON.accumulate("phone", "{home:'135:11{[',busi:139}");
输出结果如下:
{
"phone": {
"home": "135:11{[",
"busi": 139
}
}
这样就可以正常解析了,所以,在创建json时,最好将name和value都用引号扩上。
--------------------------------------------------------------------------------
提供几个JSON的参考资料:
http://www.diybl.com/course/3_program/java/javashl/2007123/89756.html
http://developer.51cto.com/art/201001/176686.htm
http://www.iteye.com/topic/78243
http://www.iteye.com/topic/71343
另外,请特别关注如下资料,介绍的非常详细:
http://jiangzhengjun.iteye.com/category/78136
JSON 的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。
JSON 与XML 具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是JSON 比
XML 数据传输的有效性要高出很多。JSON 完全独立与编程语言,使用文本格式保存。
JSON 数据有两种结构:
• Name-Value 对构成的集合,类似于Java 中的Map。
• Value 的有序列表,类似于Java 中的Array。
一个JSON 格式的数据示例:
{
"Name": "Apple",
"Expiry": "2007/10/11 13:54",
"Price": 3.99,
"Sizes": [
"Small",
"Medium",
"Large"
]
}
更多关于JSON 数据格式的说明参看JSON 官方网站:http://www.json.org(中文
内容参看:http://www.json.org/json-zh.html)
二、通过java来创建JSON对象
1.引入jar包
我这里使用的是json-lib-2.3-jdk15.jar,下载地址:http://sourceforge.net/projects/json-lib/files/
Json-lib requires (at least) the following dependencies in your classpath:
jakarta commons-lang 2.4
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1.1
ezmorph 1.0.6
2.重要的对象及方法
1)JSONObject:JSON对象{}。
2)JSONArray:JSON数组对象,[{},{}]。
3)fromObject(object):将对象转换为JSON对象。
4)JSONObject.accumulate(key,value):向JSONObject中增加JSON数据,可以重复。
5)element(key,value):向JSON对象中增加JSON数据,如果重复后一个会替换前一个。
6)toString(i,i):将JSON对象转换为字符串,如果包含参数,是将其美化后输出。
以下是一个servlet输出JSON的例子:
package com.netqin.function.demo.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import com.netqin.function.demo.model.People;
import com.netqin.function.demo.model.Phone;
public class JsonServlet extends HttpServlet{
private static final String CONTENT_TYPE = "text/plain; charset=UTF-8";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.StringToJson(req, response);
// this.MapToJson(req, response);
// this.BeanToJson(req, response);
// this.ListToJson(req, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(req, resp);
}
/**
* 描述 : <输出>. <br>
*<p>
* @param response
* @param content
* @throws IOException
*/
private void print(HttpServletResponse response,String content) throws IOException{
response.setContentType(CONTENT_TYPE);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter write = response.getWriter();
write.print(content);
write.close();
}
--------------------------------------------------------------------------------
/**
* 描述 : <将字符串或数组转换为JSON>. <br>
*<p>
如果字符串本身符合json格式,可以使用如下方法,将json字符串转换为json对象
String str = "{'check': '1'}";
JSONObject resultJSON = JSONObject.fromObject(str);
获得json对象的内容,各种get方法
String check = resultJSON.getString("check");
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
// @SuppressWarnings("unused")
private void StringToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = new JSONObject();
try {
resultJSON.accumulate("name", "Violet")
.accumulate("occupation", "developer")
.accumulate("age", new Integer(22))
.accumulate("array", new int[] { 1, 2, 3 })
.accumulate("muliArray","[{'type': '你好', 'value': 'kelly@seankelly.biz'},{'type': 'home', 'pref': 1, 'value': 'kelly@seankelly.tv'}]");
//System.out.println(resultJSON.toString(1,1));
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
输出结果:
{
"name": "Violet",
"occupation": "developer",
"age": 22,
"array": [
1,
2,
3
],
"muliArray": [
{
"type": "你好",
"value": "kelly@seankelly.biz"
},
{
"type": "home",
"pref": 1,
"value": "kelly@seankelly.tv"
}
]
}
--------------------------------------------------------------------------------
/**
* 描述 : <将Map转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
@SuppressWarnings("unchecked")
private void MapToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = null;
Map map = new HashMap(15);
try {
map.put("name", "hanqf");
map.put("age", 28);
map.put("phone", "{home:135,busi:139}");
resultJSON = JSONObject.fromObject(map);
//System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
输出结果:
{
"phone": "{home:135,busi:139}",
"age": 28,
"name": "hanqf"
}
--------------------------------------------------------------------------------
/**
* 描述 : <JavaBean转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
private void BeanToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONObject resultJSON = null;
People people = new People();
Phone phone = new Phone("135","138");
try {
people.setPhone(phone);
resultJSON = JSONObject.fromObject(people);
//System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, resultJSON.toString(1,1));
}
public class People{
String name;
int age;
Phone phone = new Phone();
setter and getter
…………………………
}
public class Phone{
String home;
String busi;
setter and getter
…………………………
}
输出结果:
{
"age": 0,
"name": "",
"phone": {
"busi": "138",
"home": "135"
}
}
--------------------------------------------------------------------------------
/**
* 描述 : <List转换为JSON>. <br>
*<p>
* @param req
* @param response
* @throws ServletException
* @throws IOException
*/
private void ListToJson(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException{
JSONArray jsonArray = null;
People people = null;
Phone phone = null;
List<People> list = new ArrayList<People>();
try {
for(int i =0;i<3;i++){
people = new People();
phone = new Phone("135"+i,"138"+i);
people.setAge(i);
people.setPhone(phone);
list.add(people);
}
jsonArray = JSONArray.fromObject(list);
//System.out.println(jsonArray.toString());
} catch (JSONException e) {
e.printStackTrace();
}
this.print(response, jsonArray.toString(1,1));
}
}
输出结果:
[
{
"age": 0,
"name": "",
"phone": {
"busi": "1380",
"home": "1350"
}
},
{
"age": 1,
"name": "",
"phone": {
"busi": "1381",
"home": "1351"
}
},
{
"age": 2,
"name": "",
"phone": {
"busi": "1382",
"home": "1352"
}
}
]
--------------------------------------------------------------------------------
三、Ajax调用
以<将字符串或数组转换为JSON>. 为例,
{
"name": "Violet",
"occupation": "developer",
"age": 22,
"array": [
1,
2,
3
],
"muliArray": [
{
"type": "你好",
"value": "kelly@seankelly.biz"
},
{
"type": "home",
"pref": 1,
"value": "kelly@seankelly.tv"
}
]
}
jsp中主要的代码如下:
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script type="text/javascript">
jQuery(function($){
$("#onebut").click(function(){
$.getJSON("http://localhost:8080/points/json.do",function(data){
$("#one").html("");
$("#one").append(data.name);
$("#one").append("##");
$("#one").append(data.age);
$("#one").append("##");
$("#one").append(data.array[0]);
//$("#one").append("##");
//$("#one").append(data.muliArray[0].type);
$.each(data.muliArray,function(i,item){
$("#one").append("##");
$("#one").append(item.type);
});
});
});
});
</script>
<button id="onebut">onebut</button>
<div id="one"></div>
点击"onebut”按钮后,页面上显示如下:
Violet##22##1##你好##home
--------------------------------------------------------------------------------
四、JSON进阶
1.再来看几个重要的对象和方法
1)JSON:JSON对象的顶级接口,JSONObject,JSONArray都实现了该接口
2)JSONSerializer:JSON串行化对象
3)JSONSerializer.toJSON(object):将对象串行化为JSON
4)JSONSerializer.toJava(json):将JSON转换为对象
5)MorphDynaBean:JSONSerializer.toJava(json)后的值默认为MorphDynaBean
6)XMLSerializer:JSON转换为xml对象
7)xMLSerializer.write(json):将JSON对象转换为xml
8)xMLSerializer.read(xml):将xml转换为JSON对象
2.实例
1)json转map
JSONObject resultJSON = JSONObject.fromObject(map);
Map mapp = (Map)JSONObject.toBean(resultJSON, Map.class);
System.out.println(mapp.get("name"));
--------------------------------------------------------------------------------
2)json转JavaBean
JSONObject resultJSON =JSONObject.fromObject(people);
People pp = (People)JSONObject.toBean(resultJSON, People.class);
System.out.println(pp.getPhone().getBusi());
--------------------------------------------------------------------------------
3)json转list
JSONObject resultJSON = JSONConvert.generate(list);
Map mapp = (Map)JSONObject.toBean(resultJSON, Map.class);
List<MorphDynaBean> list2 = (List<MorphDynaBean>)mapp.get("root");
for(MorphDynaBean pp : list2){
System.out.println(((MorphDynaBean)pp.get("phone")).get("busi"));
}
说明:
为什么没有使用JSONArray.toArray(jsonArray)或JSONArray.toCollection(jsonArray)呢?
笔者在使用过程中发现其在转换时不能对people.phone对象赋值,也就是说不能嵌套赋值,所以才改用map加MorphDynaBean的方式,也许是笔者没有搞明白,希望高手指点。
这里提供一个JSONConvert工具类,方便bean对象、map和list转换为JSONObject ,如下:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
public class JSONConvert {
public static JSONObject generate(List list) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("totalProperty", list.size());
map.put("root", list);
return JSONObject.fromObject(map);
}
public static JSONObject javabean2json(Object object) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("success", true);
map.put("data", object);
return JSONObject.fromObject(map);
}
public static JSONObject objectcollect2json(List list, String total) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("totalProperty", total);
map.put("root", list);
return JSONObject.fromObject(map);
}
}
--------------------------------------------------------------------------------
4)json转xml
需要引入该包:xom-1.1.jar,下载地址:http://repo1.maven.org/maven2/xom/xom/1.1/
XMLSerializer xmlSe = new XMLSerializer();
System.out.println("json=="+resultJSON.toString(1, 1));
String xml = xmlSe.write(resultJSON);
System.out.println("xml=="+xml);
输出结果:
json==
{
"age": 0,
"name": "",
"phone": {
"busi": "139",
"home": "135"
}
}
xml==
<?xml version="1.0" encoding="UTF-8"?>
<o>
<age type="number">0</age>
<name type="string"/>
<phone class="object">
<busi type="string">139</busi>
<home type="string">135</home>
</phone>
</o>
--------------------------------------------------------------------------------
5)json的特殊字符处理
由于json的格式要求,“:”“{}”,“[]”,“\”等等都是json的特定字符,
所以如果在name或value中出现了这些字符就会造成json解析异常,
比如:
resultJSON.accumulate("phone", "{home:135,busi:139}");
在页面上的显示结果如下:
{
"phone": {
"home": "135",
"busi": 139
}
}
如果json修改成如下形式:
resultJSON.accumulate("phone", "{home:135:11{[,busi:139}");
在页面上的显示结果如下:
{
"phone": "{home:135:11{[,busi:139}",
}
此时,json会将"{home:135:11{[,busi:139}"都作为phone的值,而不会再向下解析
所以,在遇到这样的问题时只要将value用引号括起来就行了,如下:
resultJSON.accumulate("phone", "{home:'135:11{[',busi:139}");
输出结果如下:
{
"phone": {
"home": "135:11{[",
"busi": 139
}
}
这样就可以正常解析了,所以,在创建json时,最好将name和value都用引号扩上。
--------------------------------------------------------------------------------
提供几个JSON的参考资料:
http://www.diybl.com/course/3_program/java/javashl/2007123/89756.html
http://developer.51cto.com/art/201001/176686.htm
http://www.iteye.com/topic/78243
http://www.iteye.com/topic/71343
另外,请特别关注如下资料,介绍的非常详细:
http://jiangzhengjun.iteye.com/category/78136
相关推荐
这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java类等,使得JSON与Java之间的数据交互变得简单。 `struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持...
在给定的“json.rar”压缩包中,包含了六个jar包,这些jar包主要用于Java环境下的JSON处理,特别是与jQuery进行AJAX(Asynchronous JavaScript and XML)通信时。AJAX允许网页在不重新加载整个页面的情况下与服务器...
JSON-RPC for Java是用于Java平台的一个轻量级、零入侵的远程过程调用(RPC)框架,特别适合于AJAX应用中的级联调用。本文档将详细介绍如何在Java项目中使用JSON-RPC,包括引入依赖库、创建服务类、自定义基类以及在...
总的来说,"json-lib-2.3-jdk15.jar"、"prototype.js"和"jquery-1.3.1.js"都是在Web开发中处理JSON数据的重要工具,它们共同构建了一条从前端到后端的数据传输通道,使得数据交换更加高效和灵活。在现代Web应用程序...
在Web开发中,JSON是JavaScript原生格式,这使得JSON成为JavaScript与服务器间交换数据的理想选择。 `jquery.json-2.4.min.js` 是一个jQuery的插件,专门用于处理JSON数据。jQuery是一个广泛使用的JavaScript库,它...
在IT行业中,Ajax(异步JavaScript和XML)与JSON(JavaScript Object Notation)是Web开发中的核心技术,尤其在创建交互式、动态网页时扮演着重要角色。本资源"Ajax-json.rar"显然是一份关于如何利用AJAX和JSON进行...
总结起来,这个【项目组管理系统】结合了Java的稳定性和强大的功能,利用JSON进行数据交换,借助jQuery简化前端开发,并通过Ajax提供流畅的用户体验。对于想要学习Web应用开发的人来说,这是一个很好的实践案例,...
同时,前端页面需要使用JavaScript(可能是jQuery或其他库)来发起AJAX请求,并处理返回的JSON数据。 总结来说,Struts-AJAX-JSON-Struts包是一个整合了Struts框架、AJAX和JSON功能的开发工具包,旨在帮助开发者...
4. **与AJAX集成**:与jQuery、 Prototype等库配合,实现异步请求和响应,提升用户体验。 5. **自定义结果类型**:允许开发者定义自己的JSON结果类型,以满足特定需求。 **使用方法:** 在Eclipse中,这个jar包可以...
在客户端,我们将使用jQuery来发起AJAX请求并处理返回的JSON数据。jQuery提供了`$.ajax`或简化的`$.get`、`$.post`方法来执行异步请求。比如,我们可以这样发送一个GET请求: ```javascript $.ajax({ url: '...
**jQuery、JSON与Gson在MVC架构中的应用** 在Web开发中,MVC(Model-View-Controller)模式是一种常见的架构设计,用于分离业务逻辑、数据模型和用户界面。在这个案例中,我们将探讨如何使用jQuery进行客户端的异步...
总结来说,JQuery AJAX 提供了与服务器异步交互的能力,而 JSON 则是高效的数据交换格式。两者结合使用,可以实现高效的前后端数据通信,提升用户体验,减少不必要的页面刷新。在实际项目中,了解并熟练掌握这两项...
5. **前端交互**:在前端使用JavaScript(例如jQuery)发起Ajax请求,获取并处理由Struts2 JSON插件返回的JSON数据。 通过Struts2 JSON Plugin 2.1.8,开发者可以轻松地在Struts2应用中集成JSON功能,提高应用的...
- 创建XMLHttpRequest对象或使用jQuery的$.ajax()函数,设置URL为Java后端提供的登录接口地址。 - 发送POST请求,携带用户名和密码数据,这些数据通常会被JSON格式化,因为JSON是Ajax通信中常用的数据交换格式。 ...
将JSON-RPC-Java与jQuery EasyUI结合,可以通过Ajax调用JSON-RPC服务,获取或更新数据,实现前端与后端的实时交互。 1. **创建前端界面** - 使用EasyUI创建用户界面,如表格、表单等,并配置相应的事件监听器,如...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言,包括C、C++、C#、Java、JavaScript、Perl、Python等。JSON是纯文本,易于人阅读和...
标题 "Send-json-to-servlet-using-jquery-ajax" 涉及到的是在Web开发中,如何使用jQuery的AJAX功能向JavaServlet发送JSON数据。这是一个常见的需求,特别是在前后端分离的架构中,前端通过异步方式与后端交互,提高...
在Web开发中,JSON常用于在服务器与客户端之间传输数据,尤其是在AJAX(Asynchronous JavaScript and XML)技术中。 JavaScript是运行在浏览器端的脚本语言,它为网页添加了动态功能,使得用户与网页交互变得更加...
jQuery中的AJAX请求是一种非常常见的前端异步数据交互方式,它的作用是使得页面无需重新加载即可向服务器请求数据,并将数据动态地加载到页面中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...
在IT行业中,Java、Ajax、JSON和jQuery是四个非常关键的技术元素,它们在构建现代Web应用程序时发挥着重要作用。这个“java+ajax+json+jquery完整实例”提供了一个实际的应用场景,展示了如何将这些技术有效地结合在...