Fastjson使用实例
Fastjson使用实例
相关文章地址链接:
Fastjson教程:
W3Cschool:FastJson 教程
FastJson使用范例(Java、Scala版)
在Scala中使用fastJson 解析json字符串
一、FastJson使用范例
1.1FastJson三个核心类
- JSON:fastjson的解析器,用于json字符串和javaBean、Json对象的转换
- JSONObject:fastJson提供的json对象
- JSONArray:fastJson提供json数组对象
1.2Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
1.3Scala API
1.3.1反序列化
data.log
{"name":"张三","age":10}
{"name":"李四","age":11}
{"name":"李四"}
{"age":11}
data1.log
{"data":[{"label":"123","acc":1,"version":"4.3.1"}]}
{"data":[{"label":"789","acc":1,"version":"4.3.1"},{"label":"78","acc":100,"version":"4.3.1"}]}
{"data":[{"label":"5356","acc":1,"version":"4.3.1"}]}
反序列化简单json字符串
val spark = SparkSession.builder().master("local[2]").appName("FastJsonTest").getOrCreate()
val input1 = "data.log"
val jsonRDD1 = spark.sparkContext.textFile(input1)
val dataRDD1 = jsonRDD1.map(json => {
val jsonObject = JSON.parseObject(json)
val name = jsonObject.getOrDefault("name",null)
val age = jsonObject.getOrDefault("age",null)
(name,age)
})
dataRDD1.foreach(println)
// 输出结果
(李四,null)
(null,11)
(张三,10)
(李四,11)
反序列化简单json字符串组,实现一行变多行地解析json字符串。这个我也没找到很好的方法,欢迎读者指教一下
- 方法一:字符串处理
val input2 = "data1.log"
val jsonRDD2 = spark.sparkContext.textFile(input2)
val dataRDD2 = jsonRDD2.map(json => {
JSON.parseObject(json).getJSONArray("data").toString
}).map(x => x.substring(1,x.length-1).replace("},{","}---{")) // 去掉字符串中的[],并替换},{成}---{,目的是用于区分
.flatMap(x => x.split("---")) // 字符串按----拆分
.map(x => JSON.parseObject(x))
val data2 = dataRDD2.map(jsonObject => {
val version = jsonObject.getOrDefault("version",null)
val label = jsonObject.getOrDefault("label",null)
val acc = jsonObject.getOrDefault("acc",null)
(version,label,acc)
})
data2.foreach(println)
// 输出结果
(4.3.1,5356,1)
(4.3.1,123,1)
(4.3.1,789,1)
(4.3.1,78,100)
- 方法二:List
val dataRDD3 = jsonRDD2.flatMap(json => {
val jsonArray = JSON.parseObject(json).getJSONArray("data")
var dataList : List[String] = List() // 创建一个List
for (i <- 0 to jsonArray.size()-1) {
dataList = jsonArray.get(i).toString :: dataList
}
dataList
}).map(x => JSON.parseObject(x))
val data3 = dataRDD3.map(jsonObject => {
val version = jsonObject.getOrDefault("version",null)
val label = jsonObject.getOrDefault("label",null)
val acc = jsonObject.getOrDefault("acc",null)
(version,label,acc)
})
data3.foreach(println)
// 输出结果
(4.3.1,5356,1)
(4.3.1,123,1)
(4.3.1,789,1)
(4.3.1,78,100)
1.3.2序列化
- 序列化一个简单java Bean对象
val arr = Seq("tom:10", "bob:14", "hurry:9")
val dataRdd = spark.sparkContext.parallelize(arr)
val dataString = dataRdd.map(x => {
val arr = x.split(":")
val name = arr(0)
val age = arr(1).toInt
val u = new User(name,age)
u
}).map(x => {
JSON.toJSONString(x,SerializerFeature.WriteMapNullValue) // 这里需要显示SerializerFeature中的某一个,否则会报同时匹配两个方法的错误
})
dataString.foreach(println)
// 输出结果
{"age":10,"name":"tom"}
{"age":14,"name":"bob"}
{"age":9,"name":"hurry"}
1.4Java API
1.4.1反序列化
- 反序列化一个简单Json字符串
String jsonString = "{\"name\":\"张三\",\"age\":50}";
User user= JSON.parseObject(jsonString,User.class);
System.out.println("name:"+user.getName()+" age:"+user.getAge());
// 输出结果 name:张三 age:50
- 反序列化一个简单JSON字符串成Java对象组
String jsonArrayString = "[{\"name\":\"张三\",\"age\":50},{\"name\":\"李四\",\"age\":51}]";
List<User> userList = JSON.parseArray(jsonArrayString,User.class);
Iterator it = userList.iterator();
while (it.hasNext()) {
User u = (User)it.next();
System.out.println("name:"+u.getName()+" age:"+u.getAge());
}
// 输出结果 name:张三 age:50
name:李四 age:51
- 反序列化一个复杂的JSON字符串
String complexJsonString = "{\"teacherName\":\"crystall\",\"age\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"id\":1,\"studentName\":\"lily\",\"age\":12},{\"id\":2,\"studentName\":\"lucy\",\"age\":15}]}";
Teacher teacher = JSON.parseObject(complexJsonString,Teacher.class);
1.4.2序列化
- 序列化一个Java Bean对象
User u = new User();
u.setName("王五");
u.setAge(30);
System.out.println(JSON.toJSONString(u));
// 输出结果 {"age":30,"name":"王五"}
User u1 = new User();
u1.setAge(30);
System.out.println(JSON.toJSONString(u1,SerializerFeature.WriteMapNullValue)); // 输出null,输出结果 {"age":30,"name":null}
System.out.println(JSON.toJSONString(u1,SerializerFeature.WriteNullStringAsEmpty)); // 输出"",输出结果 {"age":30,"name":""}
1.4.3序列化和反序列日期
Date date = new Date();
String dateString = JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss");
System.out.println(dateString);
// 输出结果 "2018-08-03 09:44:21"
String dateString1 = "{\"time\":\"2018-08-01 22:22:22\"}";
System.out.println(JSON.parseObject(dateString1));
// 输出结果 {"time":"2018-08-01 22:22:22"}
1.4.4JsonObject的一些操作
String jsonString1 = "{\"name\":\"张三\",\"age\":50}";
JSONObject jsonObject = JSON.parseObject(jsonString1);
System.out.println(jsonObject.keySet()); // 输出key集合,输出结果 [name, age]
if(jsonObject.containsKey("sex")) { // 判断key是否存在,输出结果 false
System.out.println(true);
} else {
System.out.println(false);
}
jsonObject.put("sex","man"); // 添加k/v键值对,输出结果 {"sex":"man","name":"张三","age":50}
System.out.println(jsonObject);
if (jsonObject.containsValue("man")) { // 判断value是否存在,输出结果 false
System.out.println(true);
} else {
System.out.println(false);
}
1.4.5 jsonArray的一些操作
String jsonArrayString1 = "[{\"id\":1,\"studentName\":\"lily\",\"age\":12},{\"id\":2,\"studentName\":\"lucy\",\"age\":15}]";
JSONArray jsonArray = JSON.parseArray(jsonArrayString1);
for (int i = 0; i < jsonArray.size(); i++) { // 遍历输出
JSONObject jsonObj= jsonArray.getJSONObject(i);
System.out.println(jsonObj.get("id"));
}
Student s3 = new Student(3,"学生乙",15);
jsonArray.add(s3); // 添加新jsonobject对象,输出结果 3
System.out.println(jsonArray.size());
if(jsonArray.contains(s3)) { // 判断是否存在,输出结果 true
System.out.println(true);
} else {
System.out.println(false);
}
二、Fastjson Obejct/Map/JSON/String互转
JSONObject json = new JSONObject();
json.put("aa", "11");
json.put("bb", "22");
json.put("cc", "33");
String jsonStr = json.toString();
System.out.println(jsonStr);
// {"aa":"11","bb":"22","cc":"33"}
System.out.println(JSONObject.parseObject(jsonStr).get("aa"));
// 11
String o = "{'area':{'area':'1','pagetype':'home'},'pagetype':'home'}";
System.out.println(((Map) JSONObject.parseObject(o).get("area")).get("area"));
// 1
String text = JSON.toJSONString(o);
Map<String, Object> userMap =
JSON.parseObject(o, new TypeReference<Map<String, Object>>() {});
System.out.println(((Map) userMap.get("area")).get("NotExsit"));
// null
System.out.println(JSON.toJSONString((Map) userMap.get("area")));
// {"area":"1","pagetype":"home"}
三、Fastjson 对象或数组转JSON
使用Fastjson 把对象或数组转JSON:
package test;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
class User {
private String name;
private int age;
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;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
};
class UserGroup {
private String name;
private List<User> users = new ArrayList<User>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserGroup [name=" + name + ", users=" + users + "]";
}
}
class FastJsonTest {
public static void main(String[] args) {
// 构建用户geust
User guestUser = new User();
guestUser.setName("guest");
guestUser.setAge(28);
// 构建用户root
User rootUser = new User();
rootUser.setName("root");
guestUser.setAge(35);
// 构建用户组对象
UserGroup group = new UserGroup();
group.setName("admin");
group.getUsers().add(guestUser);
group.getUsers().add(rootUser);
// 用户组对象转JSON串
String jsonString = JSON.toJSONString(group);
System.out.println("jsonString:" + jsonString);
// JSON串转用户组对象
UserGroup group2 = JSON.parseObject(jsonString, UserGroup.class);
System.out.println("group2:" + group2);
// 构建用户对象数组
User[] users = new User[2];
users[0] = guestUser;
users[1] = rootUser;
// 用户对象数组转JSON串
String jsonString2 = JSON.toJSONString(users);
System.out.println("jsonString2:" + jsonString2);
// JSON串转用户对象列表
List<User> users2 = JSON.parseArray(jsonString2, User.class);
System.out.println("users2:" + users2);
}
}
输出结果:
jsonString:{"name":"admin","users":[{"age":35,"name":"guest"},{"age":0,"name":"root"}]}
group2:UserGroup [name=admin, users=[User [name=guest, age=35], User [name=root, age=0]]]
jsonString2:[{"age":35,"name":"guest"},{"age":0,"name":"root"}]
users2:[User [name=guest, age=35], User [name=root, age=0]]
Fastjson使用实例的更多相关文章
- 阿里巴巴FastJSON使用实例
1. 什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Ja ...
- fastjson 的使用总结
前言 最近在开发过程中使用了大量的json作为前后端数据交换的方式,由于之前没有对json做过系统的学习,所有在使用过程中查阅了大量的文档与资料,这里主要记录了我在开发后对json以及fastjson ...
- fastjson 过滤不需要序列化的属性
JSON JSON英文全称为JavaScriptObject Natation,采用key:value键值对的方式存贮数据,与xml格式相比,JSON是一种轻量级的数据交换格式:不要被JavaScri ...
- 基于apt实现的Android快速持久化框架:AptPreferences
AptPreferences是基于面向对象设计的快速持久化框架,目的是为了简化SharePreferences的使用,减少代码的编写.可以非常快速地保存基本类型和对象.AptPreferences是基 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- Gson、FastJson、json-lib对比与实例
一.各个JSON技术的对比(本部分摘抄自http://www.cnblogs.com/kunpengit/p/4001680.html): 1.json-libjson-lib最开始的也是应用最广泛的 ...
- fastJson注解@JSONField使用的一个实例
1.实体类 package jsonArrayjsonObject.cn; import java.io.Serializable; import java.util.Date; import com ...
- redis集成到Springmvc中及使用实例
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...
- FastJSON 之bean列表转换为JSON
实例 import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; public class ...
随机推荐
- python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)
Hey! Hope you had a great day so far! 今天想和大家讨论的是一道我从这学期cs的期末考试得到灵感的题:Get 24 Poker Game.说到 Get 24 Pok ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...
- 破解版IDM使用问题
正版的IDM一般下载安装后有30天的免费使用期,过了就需要买正版序列号才能使用,网上一般提供的破解版的IDM安装后又存在无法添加到chrome插件的问题 这里针对这个问题给出解决方案: 首先下载破解版 ...
- Redis 设计与实现 8:五大数据类型之哈希
哈希对象的编码有两种:ziplist.hashtable. 编码一:ziplist ziplist 已经是我们的老朋友了,它一出现,那肯定就是为了节省内存啦.那么哈希对象是怎么用 ziplist 存储 ...
- idea配置scala编写spark wordcount程序
1.创建scala maven项目 选择骨架的时候为org.scala-tools.archetypes:scala-aechetype-simple 1.2 2.导入包,进入spark官网Docum ...
- 对数几率回归(逻辑回归)原理与Python实现
目录 一.对数几率和对数几率回归 二.Sigmoid函数 三.极大似然法 四.梯度下降法 四.Python实现 一.对数几率和对数几率回归 在对数几率回归中,我们将样本的模型输出\(y^*\)定义 ...
- Shiro的认证与授权
shiro实战教程 一.权限管理 1.1什么是权限管理 基本上涉及到用户参与的系统都需要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以 ...
- 【EXPDP/IMPDP】ORACLE数据泵导入导出案例(expdp & impdp)
概要: 因项目需要,通常需要将生产库下的部分数据抽取并恢复到测试库上 本文主要介绍数据泵导入导出的几种情况以及错误处理 案例环境: rhel-server-6.5-x86_64 oracle 11.2 ...
- [工作札记]03: 微软Winform窗体中ListView、DataGridView等控件的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有
工作中,我们发现了微软.net WinForm的一个Bug,会导致窗体设计器自动生成的代码失效,这个Bug从.net4.5到最新的.net4.7.2都存在,一直没有解决.最初是我在教学工作中发现的,后 ...
- Java中的基本数据类型与引用数据类型
一.基本数据类型 byte.short.int.long(整数类型) float.double(浮点数类型) char(字符型) boolean(布尔类型 ) Java数据大多数存放在堆栈中. 栈区: ...