转自: http://blog.csdn.net/tangerr/article/details/76217924

Fastjson是国内著名的电子商务互联网公司阿里巴巴内部开发的用于java后台处理json格式数据的一个工具包,包括“序列化”和“反序列化”两部分,它具备如下特征

1. 速度最快,测试表明,fastjson具有极快的性能,超越任其他的java json parser。包括自称最快的jackson。
2. 功能强大,完全支持java bean、集合、Map、日期、Enum,支持范型,支持自省。
3. 无依赖,能够直接运行在Java SE 5.0以上版本
4. 支持Android。
5. 这是fastJson的网址:http://code.alibabatech.com/wiki/display/FastJSON/Overview其中包含了json数据处理的教程,jar下载地址,example样例等

JSONObject 与JSONArray

  • JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
  • JSONArray
json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

Json对象中是添加的键值对,JSONArray中添加的是Json对象

例子
/**
* Created by wanggs on 2017/7/27.
*/ public class JsonTest {
public static void main(String[] args) { // Json对象中是添加的键值对,JSONArray中添加的是Json对象 JSONObject jsonObject = new JSONObject();
JSONObject jsonObject1 = new JSONObject();
JSONArray jsonArray = new JSONArray();
jsonObject1.put("001","tom"); // JSONObject 对象中添加键值对
jsonObject.put("key","value");
// 将JSONObject对象添加到json数组中
jsonArray.add(jsonObject);
jsonArray.add(jsonObject1); System.out.println(jsonArray.toString()); // 输出结果: [{"key":"value"},{"001":"tom"}] }
}

package com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List; /**
* Created by wanggs on 2017/7/27.
*/
public class FastJsonTest {
public static void main(String[] args) {
Group group = new Group();
group.setId(0);
group.setName("admin"); User user = new User();
user.setId(001);
user.setName("guest");
User user1 = new User();
user1.setId(002);
user1.setName("root");
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user1); group.setUsers(users); String json = JSON.toJSONString(group);
System.out.println(json); // 输出: {"id":0,"name":"admin","users":[{"id":1,"name":"guest"},{"id":2,"name":"root"}]}
}
}

下面给出fastJson处理json数据格式的代码样例:

package test.com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.wanggs.com.wanggs.json.fastjson.People;
import org.junit.Test; import static org.junit.Assert.*; /**
* Created by wanggs on 2017/7/27.
*/
public class FastJsonTestTest { /**
* 序列化
*/
@Test
public void toJsonString() {
People people = new People("001","tom",12);
String text = JSON.toJSONString(people);
System.out.println(text); // 输出结果: {"age":12,"id":"001","name":"tom"}
} /**
* 反序列为Json对象
*/
@Test
public void parseJsonObject(){
String text = "{\"age\":12,\"id\":\"001\",\"name\":\"tom\"}";
People people = (People) JSON.parseObject(text,People.class);
System.out.println("parseBeanObject()方法:people==" + people.getId() + "," + people.getName() + "," + people.getAge()); // 输出结果为: parseBeanObject()方法:people==001,tom,12
} /**
* 将javaBean转化为json对象
*/
@Test
public void bean2Json(){
People people = new People("002","jack",23);
JSONObject jsonObject = (JSONObject) JSON.toJSON(people);
System.out.println("bean2Json()方法:jsonObject==" + jsonObject); // 输出结果: bean2Json()方法:jsonObject=={"name":"jack","id":"002","age":23}
} /**
* 全序列化 直接把java bean序列化为json文本之后,能够按照原来的类型反序列化回来。支持全序列化,需要打开SerializerFeature.WriteClassName特性
*/
@Test
public void parseJSONAndBeanEachother(){
People people = new People("002","jack",23);
SerializerFeature[] featureArr = { SerializerFeature.WriteClassName };
String text = JSON.toJSONString(people, featureArr); System.out.println("parseJSONAndBeanEachother()方法:text==" + text);
// 输出结果:parseJSONAndBeanEachother()方法:text=={"@type":"com.wanggs.com.wanggs.json.fastjson.People","age":23,"id":"002","name":"jack"}
People people1 = (People) JSON.parse(text);
System.out.println("parseJSONAndBeanEachother()方法:People==" + people1.getId() + "," + people1.getName() + "," + people1.getAge());
// 输出结果:userObj==testFastJson001,maks,105
} }
附:javaBean类People.java
package com.wanggs.com.wanggs.json.fastjson;

/**
* Created by wanggs on 2017/7/27.
*/
public class People {
private String id;
private String name;
private int age; public People() {
} public People(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

在深入Json

package test.com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.wanggs.com.wanggs.json.fastjson.Address;
import com.wanggs.com.wanggs.json.fastjson.People;
import org.junit.Test; import java.util.*; import static org.junit.Assert.*; /**
* Created by wanggs on 2017/7/27.
*/
public class FastJsonTest1Test {
/**
* 数组转json字符串
*/
@Test
public void array2Json() {
String[] arr = {"bill", "green", "maks", "jim"};
String jsonText = JSON.toJSONString(arr);
System.out.println("array2Json()方法:jsonText==" + jsonText);
// 输出结果:jsonText==["bill","green","maks","jim"]
} /**
* json格式字符串转数组
*/
@Test
public void json2Array() {
String jsonText = "[\"bill\",\"green\",\"maks\",\"jim\"]";
JSONArray jsonArray = JSON.parseArray(jsonText);
System.out.println("json2Array()方法:jsonArray==" + jsonArray);
// 输出结果:jsonArray==["bill","green","maks","jim"]
} /**
* 数组转json格式字符串
*/
@Test
public void array2Json2() {
People people = new People("001", "tom", 12);
People people1 = new People("002", "jack", 23);
People people2 = new People("003", "mair", 22); People[] peoples = new People[]{people, people1, people2}; String jsonText = JSON.toJSONString(peoples);
System.out.println("array2Json2()方法:jsonText==" + jsonText); //输出结果:array2Json2()方法:jsonText==[{"age":12,"id":"001","name":"tom"},{"age":23,"id":"002","name":"jack"},{"age":22,"id":"003","name":"mair"}] } /**
* json格式字符串转数组
*/
@Test
public void json2Array2() {
String jsonText = "[{\"age\":12,\"id\":\"001\",\"name\":\"tom\"},{\"age\":23,\"id\":\"002\",\"name\":\"jack\"},{\"age\":22,\"id\":\"003\",\"name\":\"mair\"}]";
JSONArray jsonArr = JSON.parseArray(jsonText);
System.out.println("json2Array2()方法:jsonArr==" + jsonArr);
// 输出结果:json2Array2()方法:jsonArr==[{"name":"tom","id":"001","age":12},{"name":"jack","id":"002","age":23},{"name":"mair","id":"003","age":22}] } /**
* list集合转json格式字符串
*/
@Test
public void list2Json() {
List<People> list = new ArrayList<People>();
list.add(new People("001", "tom", 12));
list.add(new People("002", "jack", 23));
list.add(new People("003", "mair", 22)); String jsonText = JSON.toJSONString(list);
System.out.println("list2Json()方法:jsonText==" + jsonText); // 输出的结果为: [{"age":12,"id":"001","name":"tom"},{"age":23,"id":"002","name":"jack"},{"age":22,"id":"003","name":"mair"}]
} /**
* map转json格式字符串
*/
@Test
public void map2Json() {
Map map = new HashMap();
Address address1 = new Address("广东省","深圳市","科苑南路","580053");
map.put("address1", address1);
Address address2 = new Address("江西省","南昌市","阳明路","330004");
map.put("address2", address2);
Address address3 = new Address("陕西省","西安市","长安南路","710114");
map.put("address3", address3);
String jsonText = JSON.toJSONString(map, true);
System.out.println("map2Json()方法:jsonText=="+jsonText);
//输出结果:jsonText=={"address1":{"city":"深圳市","post":"580053","province":"广东省","street":"科苑南路"},"address2":{"city":"南昌市","post":"330004","province":"江西省","street":"阳明路"},"address3":{"city":"西安市","post":"710114","province":"陕西省","street":"长安南路"}}
} /**
* json转map
*/
@Test
public void json2Map(){
String text = "{\"age\":12,\"id\":\"001\",\"name\":\"tom\"}";
Map<String,Object> map = JSON.parseObject(text);
System.out.println("json2Map()方法:map=="+map);
//输出结果:{"name":"tom","id":"001","age":12}
Set<String> set = map.keySet();
for(String key : set){
System.out.println(key+"--->"+map.get(key));
}
}
}

技巧

package com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;

/**
* Created by wanggs on 2017/7/27.
*/
public class CustomText { /**
* touser : OPENID
* msgtype : text
* text : {"content":"Hello World"}
*/
//{"msgtype":"text","text":{"content":"Hello World"},"touser":"OPENID"}
private String touser;
private String msgtype;
private TextBean text; public static class TextBean {
/**
* content : Hello World
*/ private String content; public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
}
}
public String getTouser() {
return touser;
} public void setTouser(String touser) {
this.touser = touser;
} public String getMsgtype() {
return msgtype;
} public void setMsgtype(String msgtype) {
this.msgtype = msgtype;
} public TextBean getText() {
return text;
} public void setText(TextBean text) {
this.text = text;
}
} class Test{
public static void main(String[] args) {
CustomText customText = new CustomText();
customText.setTouser("OPENID");
customText.setMsgtype("text");
CustomText.TextBean textBean = new CustomText.TextBean();
textBean.setContent("Hello World");
customText.setText(textBean); String json = JSON.toJSONString(customText);
System.out.println(json);
//{"msgtype":"text","text":{"content":"Hello World"},"touser":"OPENID"}
}
/**
* {
"touser":"OPENID",
"msgtype":"text",
"text":
{
"content":"Hello World"
}
}
*/
}

归纳六种方式json转map

package com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import java.util.Map;
import java.util.Set; /**
* Created by wanggs on 2017/7/27.
*/
public class FastJsonTest1 {
public static void main(String[] args) {
String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}";
//第一种方式
Map maps = (Map)JSON.parse(str);
System.out.println("这个是用JSON类来解析JSON字符串!!!");
for (Object map : maps.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" " + ((Map.Entry)map).getValue());
}
//第二种方式
Map mapTypes = JSON.parseObject(str);
System.out.println("这个是用JSON类的parseObject来解析JSON字符串!!!");
for (Object obj : mapTypes.keySet()){
System.out.println("key为:"+obj+"值为:"+mapTypes.get(obj));
}
//第三种方式
Map mapType = JSON.parseObject(str,Map.class);
System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!");
for (Object obj : mapType.keySet()){
System.out.println("key为:"+obj+"值为:"+mapType.get(obj));
}
//第四种方式
/**
* JSONObject是Map接口的一个实现类
*/
Map json = (Map) JSONObject.parse(str);
System.out.println("这个是用JSONObject类的parse方法来解析JSON字符串!!!");
for (Object map : json.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
//第五种方式
/**
* JSONObject是Map接口的一个实现类
*/
JSONObject jsonObject = JSONObject.parseObject(str);
System.out.println("这个是用JSONObject的parseObject方法来解析JSON字符串!!!");
for (Object map : json.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
//第六种方式
/**
* JSONObject是Map接口的一个实现类
*/
Map mapObj = JSONObject.parseObject(str,Map.class);
System.out.println("这个是用JSONObject的parseObject方法并执行返回类型来解析JSON字符串!!!");
for (Object map: json.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
String strArr = "{{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," +
"{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}}";
// JSONArray.parse()
System.out.println(json);
}
}
package com.wanggs.com.wanggs.json.fastjson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import java.util.*; /**
* Created by wanggs on 2017/7/27.
*/
public class FastJsonTest {
public static void main(String[] args) { String json = "[{\"id\":1,\"type\":\"cycle\",\"attribute\":{\"center\":\"(10.4, 123.345)\", \"radius\":67.4}},{\"id\":2,\"type\":\"polygon\",\"attribute\":[{\"vertex\":\"(10.4, 133.345)\"}, {\"vertex\":\"(10.4, 143.345)\"}]}]"; JSONArray array = JSON.parseArray(json); System.out.println(array.getJSONObject(0).getJSONObject("attribute").get("center")); System.out.println(array.getJSONObject(1).getJSONArray("attribute").getJSONObject(1).get("vertex")); // 输出结果为: (10.4, 123.345) (10.4, 143.345)
}
}

方法总结

java和js中JSONObject,JSONArray,Map,String之间转换——持续更新中

4.JSONObject、JSONArray,Map转String 
JSONObject——String: 
System.out.println(myJsonObject);//可直接输出JSONObject的内容 
myJsonObject.toString(); 
JSONArray——String: 
System.out.println(myJsonArray);//可直接输出myJsonArray的内容 
myJsonArray.toString(); 
Map——String: 
System.out.println(map);//可直接输出map的内容 
map.toString();

5.JSONObject转JSONArray

JSONObject myJson = JSONObject.fromObject(jsonString);

Map m = myJson;

7.JSONArray转JSONObject 
for(int i=0 ; i < myJsonArray.length() ;i++) 

//获取每一个JsonObject对象 
JSONObject myjObject = myJsonArray.getJSONObject(i);

}

8.JSONArray转Map

9.Map转JSONObject 
JSONObject json = JSONObject.fromObject( map );

10.Map转JSONArray 
JSONArray.fromObject(map);

11.List转JSONArray 
JSONArray jsonArray2 = JSONArray.fromObject( list );

fastjson的JSONArray和JSONObject的更多相关文章

  1. fastjson的JSONArray转化为泛型列表

    背景:一个复杂结构体内部可能有array的数据,例如:{name:"test",cities:[{name:"shanghai",area:1,code:200 ...

  2. Android开发将List转化为JsonArray和JsonObject

    客户端需要将List<Object>转化为JsonArray和JsonObject的方法: 首先,List中的Object的属性需要是public: class Person { publ ...

  3. JsonArray和JsonObject的使用

    import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonTest { public static v ...

  4. JSONArray和JSONObject的简单使用

    一.为什么要使用JSONArray和JSONObject 1.后台 -->前台 能够把java对象和集合转化成json字符串格式,这样在前台的ajax方法中能够直接转化成json对象使用 ,从后 ...

  5. Json中判断是JSONArray还是JSONObject

    聪明的人总是能想到别人会遇到的问题,提前给出解决方案. List propList = new ArrayList(); //装载数据的list JSONArray array= JSONArray. ...

  6. fastjson对json字符串JSONObject和JSONArray互相转换操作示例

    2017-03-25 直接上代码: package com.tapt.instance; import com.alibaba.fastjson.JSON; import com.alibaba.fa ...

  7. fastjson对String、JSONObject、JSONArray相互转换

    String——>>>JSONArray String st = "[{name:Tim,age:25,sex:male},{name:Tom,age:28,sex:mal ...

  8. fastjson 简单使用 及其JSONObject使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  9. JSON ,JSONArray和JSONObject

    和 XML 一样,JSON 也是基于纯文本的数据格式.由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,可以用 JSON 传输一个简单的 String,Num ...

随机推荐

  1. Java多线程学习(二)---线程创建方式

    线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...

  2. Java模拟登录带验证码的教务系统(原理详解)

    一:原理 客户端访问服务器,服务器通过Session对象记录会话,服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求. 我们通过Chrome浏 ...

  3. python面向对象(封装、继承、多态)+ 面向对象小栗子

    大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...

  4. koa-router

    为了处理URL,我们需要引入koa-router这个middleware,让它负责处理URL映射. 我们把上一节的hello-koa工程复制一份,重命名为url-koa. 先在package.json ...

  5. Linux提示删除文件cannot remove `文件名': Operation not permitted

    Linux系统下删除某个文件时提示如下报错: 执行lsattr命令可以看到隐藏属性-------i--------,如下图: 通过查找资料发现: chattr命令用于改变文件属性.这项指令可改变存放在 ...

  6. PS调出冷绿色电影画面风格

    原图 一.按照惯例先磨皮,我修照片的习惯是,先拉一层色阶,使直方图平均分配,画面会显得没那么灰,当然,这只是个人喜好,先加后加都没所谓. 二.由于脸部的亮度不够,显得有点脏.所以这一步主要是通过拉曲线 ...

  7. 【转】linux if 判断

    UNIX Shell 里面比较字符写法: -eq   等于-ne    不等于-gt    大于-lt    小于-le    小于等于-ge   大于等于-z 空串=    两个字符相等!=    ...

  8. docker vm 性能优劣

    Docker容器与虚拟机区别 - unixfbi.com - 博客园 http://www.cnblogs.com/pangguoping/articles/5515286.html docker与虚 ...

  9. [编程笔记]第二章 C语言预备知识

    /*第二讲 C语言预备专业知识 1.CPU 内存条 硬盘 显卡 主板 显示器之间的关系 CPU不能直接处理硬盘上的数据 文件存储在硬盘,当运行时,操作系统把硬盘上的数据调用到内存条上. 图像以数据的形 ...

  10. Spring boot+ logback环境下,日志存放路径未定义的问题

    日志路径未定义 环境:Spring boot + logback 配置文件: <configuration> <springProfile name="dev"& ...