Java和JavaScript中使用Json方法大全

时间:2022-12-16 21:36:12

林炳文Evankaka原创作品。

转载请注明出处http://blog.csdn.net/evankaka

  摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

它基于ECMAScript的一个子集。 JSON採用全然独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包含C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。

易于人阅读和编写。同一时候也易于机器解析和生成(网络传输速率)。

一、准备工作

json是个非常重要的数据结构,在web开发中应用十分广泛。我认为每一个人都应该好好的去研究一下json的底层实现。分析一下json的相关内容,希望大家能有所收获。首先给大家说一下使用json前的准备工作,须要准备以下的六个jar包:

Java和JavaScript中使用Json方法大全

这里我统一下好打包了。能够在这里来下http://download.csdn.net/detail/evankaka/8865633

须要说明几点:
(1)json-lib最新版本号能够从这个地方下载:http://sourceforge.net/projects/json-lib/files/json-lib/
(2)ezmorph是一个简单的java类库。用于将一种bean转换成第二种bean。其动态bean的实现依赖于commons-beanutils包。ezmorph能够在这个地方下载源代码:http://sourceforge.net/projects/ezmorph/files/ezmorph/
(3)commons-beanutils是操作Java Bean的类库,依赖于commons-collections。能够从这里下载:http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

(4)commons-collections类库是各种集合类和集合工具类的封装。能够从这里下载:http://commons.apache.org/proper/commons-collections/download_collections.cgi

二、语法相关

  • JSON 语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。
        数据在名称/值对中
       数据由逗号分隔
      花括号保存对象
      方括号保存数组

  • JSON 值

JSON 值能够是:
      数字(整数或浮点数)
     字符串(在双引號中)
     逻辑值(true 或 false)
     数组(在方括号里)
      对象(在花括号里)
     null

  • JSON有两种表示结构

对象和数组。
对象结构以”{”大括号開始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(keyword)/value(值)”对构成。keyword和值之间以”:”分隔。语法结构如代码。

{
key1:value1,
key2:value2,
...
}

{"department":"产品研发","name":"小王","age":23}

当中keyword是字符串,而值能够是字符串。数值,true,false,null,对象或数组

数组结构以”[”開始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。

[
{
key1:value1,
key2:value2
},
{
key3:value3,
key4:value4
}
]

如:

[{"department":"产品研发","name":"小王","age":23},{"department":"产品研发","name":"小王","age":23}]

三、Java中使用Json基本用法

project免费下载

Jar包我也上传了。在这里http://download.csdn.net/detail/evankaka/8865633

整个project文件夹 例如以下 :

Java和JavaScript中使用Json方法大全

Employer.java例如以下

package com.mucfc.json;

import net.sf.json.JSONString;

public class Employer {

	private String name;

	private Integer age;

	private String department;

	public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
} @Override
public String toString() {
return "Employer [name=" + name + ", age=" + age + ", department="
+ department + "]";
} /* @Override 要调用这种方法请implements JSONString
public String toJSONString() {
return "{\"name\":\"" + name + "\",\"department\":\"" + department + "\"}";
}*/ }

JsonTest.java所有代码例如以下:

package com.mucfc.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;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter; /**
*Json用法总结
*@author linbingwen(博客:http://blog.csdn.net/evankaka)
*@since 2015.7.3
*/
public class JsonTest { public static void main(String args[]){
beanToJson();
beanToJson1();
beanToJson2();
arrayToJson();
listToJson();
mapToJson(); } /**
* bean对象转json
* @return void
*/
public static void beanToJson(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JSONObject json = JSONObject.fromObject(employer);
System.out.println("-----------------------------------------beanToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson() 结束------------------------------------------------");
} /**
* bean对象转json,带过滤器
* @return void
*/
public static void beanToJson1(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]
{ "age" });
JSONObject json = JSONObject.fromObject(employer, jsonConfig);
System.out.println("-----------------------------------------beanToJson1()带过滤器 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson1()带过滤器 结束------------------------------------------------");
} /**
* bean对象转json,带过滤器
* @return void
*/
public static void beanToJson2(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value)
{
return source instanceof Employer && name.equals("age");
}
});
JSONObject json = JSONObject.fromObject(employer, jsonConfig);
System.out.println("-----------------------------------------beanToJson2() 带过滤器 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson2() 带过滤器 结束------------------------------------------------");
} /**
* array对象转json
* @return void
*/
public static void arrayToJson(){
Employer employer1=new Employer();
employer1.setName("小王");
employer1.setAge(23);
employer1.setDepartment("产品研发"); Employer employer2=new Employer();
employer2.setName("小王");
employer2.setAge(23);
employer2.setDepartment("产品研发");
Employer[] employers=new Employer[]{employer1,employer2};
JSONArray json = JSONArray.fromObject(employers);
System.out.println("-----------------------------------------arrayToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------arrayToJson() 结束------------------------------------------------");
} /**
* list对象转json
* @return void
*/
public static void listToJson(){
List<String> list = new ArrayList<String>();
list.add( "first" );
list.add( "second" );
JSONArray json = JSONArray.fromObject(list);
System.out.println("-----------------------------------------listToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------listToJson() 结束------------------------------------------------");
} /**
* map对象转json
* @return void
*/
public static void mapToJson(){
Map<Object,Object> map = new HashMap<Object,Object>();
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("-----------------------------------------mapToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------mapToJson() 结束------------------------------------------------");
} }

以下分别对各个部分来进行说明

1. Bean转换成json代码

	/**
* bean对象转json
* @return void
*/
public static void beanToJson(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JSONObject json = JSONObject.fromObject(employer);
System.out.println("-----------------------------------------beanToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson() 结束------------------------------------------------");
}

执行结果例如以下:

Java和JavaScript中使用Json方法大全

2. 数组转换成json代码

	/**
* array对象转json
* @return void
*/
public static void arrayToJson(){
Employer employer1=new Employer();
employer1.setName("小王");
employer1.setAge(23);
employer1.setDepartment("产品研发"); Employer employer2=new Employer();
employer2.setName("小王");
employer2.setAge(23);
employer2.setDepartment("产品研发");
Employer[] employers=new Employer[]{employer1,employer2};
JSONArray json = JSONArray.fromObject(employers);
System.out.println("-----------------------------------------arrayToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------arrayToJson() 结束------------------------------------------------");
}

执行结果例如以下:

Java和JavaScript中使用Json方法大全

3. List集合转换成json方法

	/**
* list对象转json
* @return void
*/
public static void listToJson(){
List<String> list = new ArrayList<String>();
list.add( "first" );
list.add( "second" );
JSONArray json = JSONArray.fromObject(list);
System.out.println("-----------------------------------------listToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------listToJson() 结束------------------------------------------------");
}

执行结果例如以下:
                                           Java和JavaScript中使用Json方法大全

4. Map集合转换成json方法

	/**
* map对象转json
* @return void
*/
public static void mapToJson(){
Map<Object,Object> map = new HashMap<Object,Object>();
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("-----------------------------------------mapToJson() 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------mapToJson() 结束------------------------------------------------");
}

执行结果例如以下:
                                         Java和JavaScript中使用Json方法大全

四、JSONObject的过滤设置

通常对一个json串和java对象进行互转时,常常会有选择性的过滤掉一些属性值。比如以下的类:

package com.mucfc.json;

public class Employer {

	private String name;

	private Integer age;

	private String department;

	public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
} @Override
public String toString() {
return "Employer [name=" + name + ", age=" + age + ", department="
+ department + "]";
} }

假设我想过滤age属性怎么办?

方法一:实现JSONString接口

package com.mucfc.json;

import net.sf.json.JSONString;

public class Employer implements JSONString{

	private String name;

	private Integer age;

	private String department;

	public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
} @Override
public String toString() {
return "Employer [name=" + name + ", age=" + age + ", department="
+ department + "]";
} @Override
public String toJSONString() {
return "{\"name\":\"" + name + "\",\"department\":\"" + department + "\"}";
} }

Java和JavaScript中使用Json方法大全

方法二:设置jsonconfig实例,对包含和须要排除的属性进行加入或删除。

	/**
* bean对象转json,带过滤器
* @return void
*/
public static void beanToJson1(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]
{ "age" });
JSONObject json = JSONObject.fromObject(employer, jsonConfig);
System.out.println("-----------------------------------------beanToJson1()带过滤器 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson1()带过滤器 结束------------------------------------------------");
}
Java和JavaScript中使用Json方法大全

方法三:使用propertyFilter实例过滤属性

	/**
* bean对象转json,带过滤器
* @return void
*/
public static void beanToJson2(){
Employer employer=new Employer();
employer.setName("小王");
employer.setAge(23);
employer.setDepartment("产品研发");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value)
{
return source instanceof Employer && name.equals("age");
}
});
JSONObject json = JSONObject.fromObject(employer, jsonConfig);
System.out.println("-----------------------------------------beanToJson2() 带过滤器 開始------------------------------------------------");
System.out.println(json.toString());
System.out.println("-----------------------------------------beanToJson2() 带过滤器 结束------------------------------------------------");
}
Java和JavaScript中使用Json方法大全

javaproject下载

五、JavaScript中使用JSON

本节project免费下载

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

之前我一直有个困惑,分不清普通字符串

1、json字符串和json对象的差别。

字符串:这个非常好解释,指使用“”双引號或’’单引號包含的字符。比如:var comStr = 'this is string';
json字符串:指的是符合json格式要求的js字符串。比如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
json对象:指符合json格式要求的js对象。比如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };

2、JSON 实例 - 来自字符串的对象

创建包含 JSON 语法的 JavaScript 字符串:

var txt = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

由于 JSON 语法是 JavaScript 语法的子集。JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号里。这样才干避免语法错误:

var obj = eval ("(" + txt + ")");

例如以下格式:

<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p>
First Name: <span id="fname"></span><br>
Last Name: <span id="lname"></span><br>
</p>
<script>
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}'; var obj = eval ("(" + txt + ")"); document.getElementById("fname").innerHTML=obj.employees[1].firstName
document.getElementById("lname").innerHTML=obj.employees[1].lastName
</script>
</body>
</html>

输出结果:

Java和JavaScript中使用Json方法大全

只是eval解析json有安全隐患!

如今大多数浏览器(IE8及以上,Chrome和Firefox差点儿相同所有)自带原生JSON对象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,请使用这两个方法!

假设操心parse()对对象抛异常。能够加一个封装函数:

JSON.pParse = function( tar ) {
if( typeof( tar ) === 'string' ) {
return JSON.parse( tar );
} else {
return tar;
}
};

1、从JSON中读数据

//1,从JSON中读数据
function ReadJSON() {
alert(obj.key1);
alert(obj.key2); alert(obj.person[0].name); //或者alert(obj.person[0]["name"])
alert(obj.object.msg); //或者alert(obj.object["msg"])
}
Java和JavaScript中使用Json方法大全

2、添加JSON中的数据

function Add() {
//往JSON对象中添加了一条记录
obj.sex= "男" //或者obj["sex"]="男"
alert(obj.sex);
}

Java和JavaScript中使用Json方法大全

3、更新JSON中的数据
function Update() {
    obj.count = 10; //或obj["count"]=10
}

Java和JavaScript中使用Json方法大全

4、删除JSON中的数据

function Delete() {
delete obj.count;
}
Java和JavaScript中使用Json方法大全

5、遍历JSON中的数据

function Traversal() {
for (var c in obj) {
console.log(c + ":", obj[c]);
}
}
Java和JavaScript中使用Json方法大全

六、XML与JSON对照

  • XML定义

扩展标记语言 (Extensible Markup Language, XML),用于标记电子文件使其具有结构性的标记语言,能够用来标记数据、定义数据类型,是一种同意用户对自己的标记语言进行定义的源语言。XML使用DTD(document type definition)文档类型定义来组织数据;?格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言(SGML) 的子集,非常适合Web 传输。XML提供统一的方法来描写叙述和交换独立于应用程序或供应商的结构化数据。

  • JSON定义

JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于高速编写的特性。可在不同平台之间进行数据交换。JSON採用兼容性非常高的、全然独立于语言文本格式,同一时候也具备相似于C语言的习惯(包含C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。

JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999的一个子集。

  • XML和JSON优缺点

(1).XML的优缺点
<1>.XML的长处
A.格式统一,符合标准;
B.easy与其它系统进行远程交互,数据共享比較方便。

<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.server端和client都须要花费大量代码来解析XML,导致server端和client代码变得异常复杂且不易维护;
C.client不同浏览器之间解析XML的方式不一致,须要反复编写非常多代码;D.server端和client解析XML花费较多的资源和时间。

  • JSON的优缺点

<1>.JSON的长处:
A.数据格式比較简单,易于读写,格式都是压缩的,占用带宽小;B.易于解析,clientJavaScript能够简单的通过eval()进行JSON数据的读取;C.支持多种语言,包含ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等server端语言,便于server端的解析;D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHPserver端的对象、数组等能直接生成JSON格式,便于client的訪问提取;E.由于JSON格式能直接为server端代码使用,大大简化了server端和client的代码开发量,且完毕任务不变,而且易于维护。
<2>.JSON的缺点
A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
B.JSON格式眼下在Web Service中推广还属于0基础阶段。

Java和JavaScript中使用Json方法大全的更多相关文章

  1. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语 ...

  2. JavaScript中解析JSON --- json&period;js 、 json2&period;js 以及 json3&period;js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js.json2.js.js ...

  3. javascript中的splice方法介绍&amp&semi;示例

    javascript 中的 splice 方法很强大,它可以用于插入.删除或替换数组的元素. 下面来一一介绍! 删除:用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数 ...

  4. 一分钟搞懂JavaScript中的JSON对象

    JSON(JavaScript Object Notation)是表示值和对象的通用格式. JavaScript 提供了如下方法: JSON.stringify 将对象转换为 JSON. JSON.p ...

  5. 简单使用JSON&comma;JavaScript中创建 JSON 对象&lpar;一&rpar;

    JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...

  6. Java 8 接口中的默认方法与静态方法

    Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...

  7. javascript中的toString&lpar;&rpar;方法

    javascript中的toString()方法,主要用于Array.Boolean.Date.Error.Function.Number等对象.下面是这些方法的一些解析和简单应用,做个纪律,以作备忘 ...

  8. JavaScript中使用JSON,即JS操作JSON总结

    JSON(JavaScript Object Notation 对象标记) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生 ...

  9. 2017&period;10&period;28 针对Java Web应用中错误异常处理方法的运用

    针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...

随机推荐

  1. error MSB6006&colon; &OpenCurlyDoubleQuote;CL&period;exe”已退出,代码为X —— 的解决办法

    错误 : error MSB6006: “CL.exe”已退出,代码为X . 解决方法: 1.有少可能是执行目录引起的. 参考 http://bbs.csdn.net/topics/370064083 ...

  2. LeeCode 1-Two Sum

    Two Sum Total Accepted: 125096 Total Submissions: 705262 Question Solution Given an array of integer ...

  3. IE10与IMG图片PNG显示不了 WP中的WebBrowser中无法查看PNG格式的图片

    在IE10下,IMG的图片不能是PNG格式的,PNG格式显示不了,JPG显示就可以

  4. 2012天津E题

    给我们n个坐标点和一个距离d,表示车开m米就没油了. 然后要选几个点建立油站,使得能够从1出发遍历所有的点,然后回到1.  并且规定1这个点必须有油站,在第i个点建立油站的费用是 2^(i-1) 因为 ...

  5. &lbrack;置顶&rsqb; ZK(The leading enterprise Ajax framework)入门指南

    1. Why ZK JavaEE领域从来就不缺少Framework尤其是Web Framework,光是比较流行的就有:SpringMVC.Struts2.JSF系列…… 其它不怎么流行的.小众的.非 ...

  6. Java 基于log4j的日志工具类

    对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatfo ...

  7. Linux系统网络性能实例分析

    由于TCP/IP是使用最普遍的Internet协议,下面只集中讨论TCP/IP 栈和以太网(Ethernet).术语 LinuxTCP/IP栈和 Linux网络栈可互换使用,因为 TCP/IP栈是 L ...

  8. 谈谈final

    用final修饰类 这种情况很简单,这个类不能被继承.它"绝后"了. 用final修饰方法 这里可以分两种情况. 用final修饰private方法.其实也不能这么说,因为私有方法 ...

  9. esxi存储(外部共享存储)

    vSphere 基础物理架构中存储是一个非常关键的部分,没有好的存储,虚拟化也就没有存在的价值,并且它能够决定其系统性能的高低和如vMotion等高级功能能否实现.所以本次重点介绍vSphere中的存 ...

  10. tomcat启动成功但是访问方面都是404

    1.开发环境与错误情况 开发环境是jdk1.7+maven+git+spring MVC+spring+mybatis+mysql. 楼主做小例子的时候发现,tomcat成功启动,但是访问主页,页面提 ...