JSON以及Java转换JSON的方法(前后端常用处理方法)

时间:2024-04-16 09:33:10

本文主要讲述如下几个内容:

1、JSON定义以及JSON的特性

2、如何在JavaScript中解释JSON格式数据

3、如何在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON字符串)

一、JSON

w3c上对JSON有比较详细的介绍,链接http://www.w3school.com.cn/json/index.asp.下面仅讲述重要的几点。

Json是 javascript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,具有层级结构(值中存在值), 数据可使用
AJAX 进行传输,独立于语言,具有自我描述性,比XML更小更快更容易解析。JSON格式字符串转化为JavaScript对象无需解析器, JSON 使用 JavaScript 语法,使用JavaScript的eval()函数可生成JavaScript对象。

下面给出JSON格式的数据,非常清晰,无需多做解释,语法请阅读官方文档。

标准JSON格式数据

{ "firstName":"John" , "lastName":"Doe" }
标准JSON格式数组数据
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}

或直接赋值给变量:

var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];

二、在JavaScript中解释JSON数据

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

下面直接给出代码示例:

  1. <pre name="code" class="html"><html>
  2. <head>
  3. </head>
  4. <script type="text/javascript">
  5. function  testjson(){
  6. //Json格式的字符串
  7. var txt = '{ "employees" : [' +
  8. '{ "firstName":"Bill" , "lastName":"Gates" },' +
  9. '{ "firstName":"George" , "lastName":"Bush" },' +
  10. '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
  11. //使用eval函数转换成JSON对象
  12. //eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
  13. var obj = eval ("(" + txt
  14. + ")");
  15. //通过对象名,然后根据数组下标以及属性名取值
  16. alert(obj.employees[0].firstName);
  17. }
  18. </script>
  19. <body>
  20. <a href="" onclick="testjson()">Click me!</a>
  21. </body>
  22. </html>
<pre name="code" class="html"><html>
<head>
</head>
<script type="text/javascript">
function testjson(){ //Json格式的字符串

var txt = '{ "employees" : [' +

'{ "firstName":"Bill" , "lastName":"Gates" },' +

'{ "firstName":"George" , "lastName":"Bush" },' +

'{ "firstName":"Thomas" , "lastName":"Carter" } ]}'; //使用eval函数转换成JSON对象

//eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj = eval ("(" + txt

+ ")");

//通过对象名,然后根据数组下标以及属性名取值

alert(obj.employees[0].firstName);

} </script>

<body>

<a href="" onclick="testjson()">Click me!</a>

</body>

</html>

直接保存为后缀名为html或htm的文件,用浏览器打开,就可以测试运行结果了。

三、Java操作JSON

1、Josn-lib

JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

下载地址:http://json-lib.sourceforge.NET/

还要需要的第3方包:

rg.apache.commons(3.2以上版本)

org.apache.oronet.sf.

ezmorph(ezmorph-1.0.4.jar)

nu.xom

下面直接给出代码:

  1. package com.doyeden.json;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.apache.commons.beanutils.PropertyUtils;
  7. import net.sf.json.JSONArray;
  8. import net.sf.json.JSONObject;
  9. import net.sf.json.xml.XMLSerializer;
  10. public class TestJson {
  11. public static void main(String[] args) {
  12. // 1. List
  13. boolean[] booleanArray = new boolean[] { false, false, true, false };
  14. JSONArray ja = JSONArray.fromObject(booleanArray);
  15. System.err.println(ja);
  16. List list = new ArrayList();
  17. list.add("first");
  18. list.add("second");
  19. JSONArray jsonArray2 = JSONArray.fromObject(list);
  20. System.out.println(jsonArray2);
  21. JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");
  22. System.out.println(jsonArray3);
  23. // 2. Map
  24. Map map = new HashMap();
  25. map.put("name", "json");
  26. map.put("bool", Boolean.TRUE);
  27. map.put("int", new Integer(1));
  28. map.put("arr", new String[] { "a", "b" });
  29. map.put("func", "function(i){ return this.arr[i]; }");
  30. JSONObject json = JSONObject.fromObject(map);
  31. System.out.println(json);
  32. // 3. JSON Bean
  33. JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",
  34. "Male"));
  35. System.out.println(jsonObject);
  36. // 4. Json Beans
  37. List<JsonBean> lbs = new ArrayList<JsonBean>();
  38. JsonBean j1 = new JsonBean("kevin", "Male");
  39. JsonBean j2 = new JsonBean("maimai", "Femal");
  40. lbs.add(j1);
  41. lbs.add(j2);
  42. JSONArray ja_beans = JSONArray.fromObject(lbs);
  43. System.out.println(ja_beans);
  44. }
  45. }
package com.doyeden.json;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map; import org.apache.commons.beanutils.PropertyUtils; import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.xml.XMLSerializer; public class TestJson {

public static void main(String[] args) {
	// 1. List
boolean[] booleanArray = new boolean[] { false, false, true, false };
JSONArray ja = JSONArray.fromObject(booleanArray);
System.err.println(ja); List list = new ArrayList();
list.add("first");
list.add("second");
JSONArray jsonArray2 = JSONArray.fromObject(list);
System.out.println(jsonArray2); JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");
System.out.println(jsonArray3); // 2. Map
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);
System.out.println(json); // 3. JSON Bean
JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",
"Male"));
System.out.println(jsonObject); // 4. Json Beans
List&lt;JsonBean&gt; lbs = new ArrayList&lt;JsonBean&gt;();
JsonBean j1 = new JsonBean("kevin", "Male");
JsonBean j2 = new JsonBean("maimai", "Femal");
lbs.add(j1);
lbs.add(j2);
JSONArray ja_beans = JSONArray.fromObject(lbs);
System.out.println(ja_beans); }

}

下面的类的get和set方法必须有才可以

  1. package com.doyeden.json;
  2. public class JsonBean {
  3. private String name;
  4. private String sex;
  5. public JsonBean() {
  6. super();
  7. }
  8. public JsonBean(String name, String sex) {
  9. super();
  10. this.name = name;
  11. this.sex = sex;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getSex() {
  20. return sex;
  21. }
  22. public void setSex(String sex) {
  23. this.sex = sex;
  24. }
  25. }
package com.doyeden.json;

public class JsonBean {

private String name;

private String sex;
public JsonBean() {
super();
}
public JsonBean(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

程序运行结果:

  1. [false,false,true,false]
  2. ["first","second"]
  3. ["json","is","easy"]
  4. {"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}
  5. {"name":"kevin","sex":"Male"}
  6. [{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]
[false,false,true,false]
["first","second"]
["json","is","easy"]
{"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}
{"name":"kevin","sex":"Male"}
[{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]

2、 目前比较流行的fast-json解析 ,更多fast-json请自行查阅文档

阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:

速度最快,测试表明,fastjson具有极快的性能,超越任其他的JavaJson parser。包括自称最快的JackJson;

功能强大,完全支持javaBean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在

Java SE 5.0以上版本;支持Android;开源 (Apache 2.0)

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final Object
parse(String text); //
把JSON文本parse为JSONObject或者JSONArray 

public static final JSONObject
parseObject(String text); //
把JSON文本parse成JSONObject    

public static final  T
parseObject(String text, Class clazz); //
把JSON文本parse为JavaBean 

public static final JSONArray
parseArray(String text); //
把JSON文本parse成JSONArray 

public static final  List
parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合 

public static final String
toJSONString(Object object); //
将JavaBean序列化为JSON文本 

public static final String
toJSONString(Object object, boolean prettyFormat); //
将JavaBean序列化为带格式的JSON文本 

public static final Object
toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

实例代码:

(需要导入fastjson的jar包)

  1. package com.doyeden.json.fastjson;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.alibaba.fastjson.JSON;
  5. import com.doyeden.json.JsonBean;
  6. public class Test {
  7. public static void main(String[] args) {
  8. //1 parse bean to json text
  9. JsonBean jb=new JsonBean("kevin","Male");
  10. System.out.println(JSON.toJSONString(jb));
  11. //2 parse list to json array
  12. List<JsonBean> ljs=new ArrayList<JsonBean>();
  13. JsonBean jb1=new JsonBean("kevin","Male");
  14. JsonBean jb2=new JsonBean("maimai","Female");
  15. ljs.add(jb2);
  16. ljs.add(jb1);
  17. System.out.println(JSON.toJSONString(ljs));
  18. //3 parse json text to bean
  19. String s="{\"name\":\"greg\",\"sex\":\"Male\"}";
  20. JSON jO=JSON.parseObject(s);
  21. JsonBean j=JSON.toJavaObject(jO, JsonBean.class);
  22. System.out.println(j.getName());
  23. }
  24. }
package com.doyeden.json.fastjson;

import java.util.ArrayList;

import java.util.List; import com.alibaba.fastjson.JSON;

import com.doyeden.json.JsonBean; public class Test {

public static void main(String[] args) {
	//1 parse bean to json text
JsonBean jb=new JsonBean("kevin","Male");
System.out.println(JSON.toJSONString(jb)); //2 parse list to json array
List&lt;JsonBean&gt; ljs=new ArrayList&lt;JsonBean&gt;();
JsonBean jb1=new JsonBean("kevin","Male");
JsonBean jb2=new JsonBean("maimai","Female");
ljs.add(jb2);
ljs.add(jb1);
System.out.println(JSON.toJSONString(ljs)); //3 parse json text to bean
String s="{\"name\":\"greg\",\"sex\":\"Male\"}";
JSON jO=JSON.parseObject(s);
JsonBean j=JSON.toJavaObject(jO, JsonBean.class);
System.out.println(j.getName()); }

}

结果:

{"name":"kevin","sex":"Male"}

[{"name":"maimai","sex":"Female"},{"name":"kevin","sex":"Male"}]

greg

3、其他方式,例如 org-lib等,使用方法跟上述两种方式非常相似。就不做更多介绍了。个人推荐还是使用fast-json。

总结:本文讲述了JSON格式数据以及如何在JavaScript和Java代码中操作JSON格式数据,可以发现,因为JSON自解释性,轻量级,体积小,跨平台等特点,JSON格式数据非常适合作为和后端数据交互的格式。JavaScript本身就可以解释JSON,这样就省去了很多第三方库,java中,关于讲JSON转换成Java对象以及讲Java对象和对象数组转换成JSON格式数据的类库其实有很多,但是目前来说最快的是fastjson.

转自:http://blog.****.net/kevinofneu/article/details/36542499