JSON以及Java转换JSON的方法(前后端常用处理方法)
本文主要讲述如下几个内容:
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 对象,然后在网页中使用该数据。
下面直接给出代码示例:
- <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>
<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
下面直接给出代码:
- 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<JsonBean> lbs = new ArrayList<JsonBean>();
- 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);
- }
- }
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<JsonBean> lbs = new ArrayList<JsonBean>();
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方法必须有才可以
- 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;
- }
- }
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;
}
}
程序运行结果:
- [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"}]
[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包)
- 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<JsonBean> ljs=new ArrayList<JsonBean>();
- 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());
- }
- }
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<JsonBean> ljs=new ArrayList<JsonBean>();
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.csdn.net/kevinofneu/article/details/36542499
JSON以及Java转换JSON的方法(前后端常用处理方法)的更多相关文章
- JSON以及Java转换JSON的方法(前后端经常使用处理方法)
本文主要讲述例如以下几个内容: 1.JSON定义以及JSON的特性 2.怎样在JavaScript中解释JSON格式数据 3.怎样在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON ...
- 前后端常用通讯方式-- ajax 、websocket
一.前后端常用通讯方式 1. ajax 浏览器发起请求,服务器返回数据,服务器不能主动返回数据,要实现实时数据交互只能是ajax轮询(让浏览器隔个几秒就发送一次请求,然后更新客户端显示.这种方式实际 ...
- javascript、js操作json方法总结(json字符创转换json对象)
相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格 ...
- js声明json数据,打印json数据,遍历json数据,转换json数据为数组
1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...
- 【Java/Json】Java对Json进行建模,分词,递归向下解析构建Json对象树
伸手党的福音 代码下载:https://files.cnblogs.com/files/xiandedanteng/JsonLexerBuilder20191202.rar 互联网上成型的对Json进 ...
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- spring boot 解决 跨域 的两种方法 -- 前后端分离
1.前言 以前做项目 ,基本上是使用 MVC 模式 ,使得视图与模型绑定 ,前后端地址与端口都一样 , 但是现在有些需求 ,需要暴露给外网访问 ,那么这就出现了个跨域问题 ,与同源原则冲突, 造成访问 ...
- Java中关于 ArrayList 和 Map 的常用遍历方法 (学习笔记,便于以后查询)
一.学习ArrayList与Map时,关于常用遍历方法的记录如下: 二.附源码如下: package com.study.in.myself; import java.util.ArrayList; ...
- java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException
缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang3-3.1.jar 出现异常: jav ...
随机推荐
- vb编程代码大全
数值型函数:abs(num): 返回绝对值sgn(num): num>0 1; num=0 0; num<0 -1;判断数值正负hex(num): 返回十六进制值 直接表示:&Hx ...
- 从零Wordpress建站经验分享,内附耗时间及成本
5月末回国,工作进入空档期. 每天上班没有任务压身,日子过得反而更加难熬. 一直自己做一个网站,却总下不定决心,总是懒得迈出第一步. 正巧朋友需要建设一个宣传用网站. 外面的公司给他报价很高. 反正我 ...
- 扩展SQLite使其能从apk文件中读取db
游戏中会大量使用到配置文件,每个项目组根据自己不同的需求会选择不同的存储格式,比如使用Json或者SQLite来存储数据.此处我们只对使用SQLite的情况来做讨论.一般情况下会选择把它放在可读写目录 ...
- jmeter-Java-MongoDB 数据库增删改查操作
在日常测试过程中会发现有些测试数据是通过数据库来获取的,一般常用的数据比如SQL .Oracle,此类数据库jmeter有专门的插件进行使用JDBC,今天跟大家说一说关于Mongodb这个数据库jme ...
- python基础(5):数字和字符串类型
今天总结一下数据类型中的数字和字符串型. 预习: 小练习 一.数字(int,float) 在python3中数字类型只有整形,浮点型,复数.而复数在平时的编程中几乎用不到所以我们只要掌握整形和浮点型即 ...
- shell脚本中字符串的常见操作及"command not found"报错处理(附源码)
简介 昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以后再犯. 字符串的定义与赋值 # 定义S ...
- Android - 多语言自动适配
Android为多语言适配提供了很大的方便.开发者不需要在代码中进行修改.只需要配置xml文件. res --> values 其中存放有xml文件.一般这些都是英文的字符串.我们可以存放其他语 ...
- nopCommerce 3.9 大波浪系列 之 引擎 NopEngine
本章涉及到的内容如下 1.EngineContext初始化IEngine实例 2.Autofac依赖注入初始化 3.AutoMapper框架初始化 4.启动任务初始化 一.EngineContext初 ...
- 极简的Android RecyclerView Adapter(使用DataBinding)
阅读本篇文章需要读者对Android Databinding和RecyclerView有一定的了解. 简介 我们知道,DataBinding的核心理念是数据驱动.数据驱动驱动的目标就是View,使用D ...
- (转)log4j(六)——log4j.properties简单配置样例说明
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...