FastJson使用范例(Java、Scala版)

发布时间:2020-07-08 02:43:01 作者:xiao酒窝
来源:网络 阅读:819

0.目录

1. FastJson简介

JSON协议在日常开发中很常用,包括前后端的数据接口,日志字段的保存等,通常都采用JSON协议。FastJson是阿里的开源框架,很好用,估计开发的同学都有使用过。这里做一个简单的用法总结,配一些demo。除了Java版本外,由于在Spark也经常清洗日志,所以配上了Scala版本,方便日后查询使用。完整代码可以参考Github:https://github.com/tygxy/BigData

2. FastJson三个核心类

3. Maven

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.47</version>
    </dependency>

4. Java API

4.1 反序列化

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

4.2 序列化

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":""}

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"}

4.4 JsonObject的一些操作

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);
}

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对象,输出结果 3System.out.println(jsonArray.size());if(jsonArray.contains(s3)) { // 判断是否存在,输出结果 true
    System.out.println(true);
} else {
    System.out.println(false);
}

5.Scala API

5.1 反序列化

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)

5.2 序列化

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"}

6.参考

推荐阅读:
  1. 在Apache Spark中使用UDF
  2. FastJson的使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

fastjson 使用范例 ava

上一篇:JS实现复制网页内容自动加入版权内容代码和原文链接

下一篇:24.NAT地址转换技术

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》