相关文章地址链接: Fastjson教程: W3Cschool:FastJson 教程 FastJson使用范例(Java、Scala版) 在Scala中使用fastJson 解析json字符串
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)使用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]]