在scala中需要将case class 序列化为string,代码如下

results.map(JSON.toJSONString(_)).foreach(println)

case class pay(id:String)

然后出现下面的错误

Error:(35, 12) ambiguous reference to overloaded definition,
both method toJSONString in object JSON of type (x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)String
and method toJSONString in object JSON of type (x$1: Any)String
match argument types (PayTest.this.pay)
JSON.toJSONString(t)

查看FastJson toJSONString发现有个可变参数相同的方法,结合错误应该是scala不知道调用哪个方法导致的

    public static final String toJSONString(Object object) {
return toJSONString(object, new SerializerFeature[0]);
} public static final String toJSONString(Object object, SerializerFeature... features) {
SerializeWriter out = new SerializeWriter(); try {
JSONSerializer serializer = new JSONSerializer(out);
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
} serializer.write(object); return out.toString();
} finally {
out.close();
}
}

我们直接在代码指定调用可变参数的方法,SerializerFeature是个枚举,我们直接选择第一个

results.map(JSON.toJSONString(_, SerializerFeature.QuoteFieldNames)).foreach(println)

但是出现的结果不是想要的,class的字段都没有序列化出来

{}

其实fastjson 默认是基于方法clz.getMethods()进行字段查找过滤的,而scala中的getter和setter方法完全不是java那种命名方式。scala中的getter:def foo():T setter: def foo_(val:T):Unit因此如果采用默认配置序列化scala对象,会出现如上问题。但是我们可以加上BeanProperty,目的是让这个类有getter和setter方法

case class pay(@BeanProperty id:String)

最后结果为

{"id":"1"}

另外我们还有一种基于Jackson的方式

  def objectParse = new RichMapFunction[pay, String] {
private var mapper: ObjectMapper = _ override def open(parameters: Configuration): Unit = {
this.mapper = new ObjectMapper()
} override def map(value: pay): String = {
mapper.writeValueAsString(value)
}
} results.map(objectParse).foreach(println)

参考:https://github.com/alibaba/fastjson/issues/1282

scala调用fastjson JSON.toJSONString()序列化对象出错的更多相关文章

  1. JavaWeb_(Jar)使用fastjson解析json和序列化对象

    菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...

  2. C# 调用Webservice并传递序列化对象

    原文:C# 调用Webservice并传递序列化对象 C#动态调用WebService注意要点 1.动态调用的url后面注意一定要加上?WSDL   例如:string _url = "ht ...

  3. com.alibaba.fastjson.JSON对类对象的序列化与反序列化

    1. 目标 把类的对象存储到字符串可存储 2. 类定义 public interface JsonInterface { } mport com.alibaba.fastjson.JSON; impo ...

  4. TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法(json无法序列化对象的解决办法)

    1.一个简单的方法来修补json模块,这样序列将支持日期时间. import json import datetime json.JSONEncoder.default = lambda self, ...

  5. Json互相序列化对象

    using System.ServiceModel; using System.ServiceModel.Web; using System.Runtime.Serialization.Json; u ...

  6. 【java】JSON.toJSONString 空对象也可以转化为JSON字符串

    <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...

  7. Newtonsoft.Json 的序列化与反序列化

    首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一 ...

  8. 【转】Newtonsoft.Json 的序列化与反序列化

    http://www.cnblogs.com/08shiyan/p/3464028.html 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Fr ...

  9. Json.Net序列化和反序列化设置

    首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一 ...

  10. Json.Net系列教程 3.Json.Net序列化和反序列化设置

    原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framewo ...

随机推荐

  1. ENGG1310 P2.1 Intro to CE Computer Systems, Programming & Networking

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams H/W & ...

  2. Python_七十二变_二进制和字符编码

    第二章  七十二变 二进制和字符编码 8bit为1byte   字节 1024byte为1KB  千 1024KB为1MB  兆 1024MB为1GB  吉 1024GB为1TB  太 ASCLL字符 ...

  3. 【杂项】利用CUDA实现tensorflow的gpu加速——以NXP的eIQ Portal Command line环境为例

    这是一个针对于eIQ的解决方案,笔者所用显卡是GTX1650 step1:下载CUDA和CuDnn 2022年3月,eIQ所使用tensorflow版本为2.5.0,因此对应CUDA 11.2.0,C ...

  4. vue input输入框关键字筛选检索列表数据展示

    想必大家在项目开发中难免会用到关键字筛选的功能,正好这次项目有需求要做这一块,就整理一下vue的input输入框输入关键字检索数据列表的代码.下面直接上代码: html: <!-- 筛选demo ...

  5. 推荐ssh工具

    介绍一些我常用的ssh工具 1.Xshell ​ Xshell应该是一款家喻户晓的ssh连接工具,本人有幸也在很长一段时间都在使用Xshell,但是Xshell他是收费的!而且每次关闭后都会有一个提示 ...

  6. 【驱动】libjpeg 库的移植

    1.下载库  http://www.ijg.org/  下载  jpegsrc.v9e.tar.gz 2.准备好空文件夹位置 opt/libdecode  opt/libdecode/lib  opt ...

  7. ES-索引库

    数据准备 本次学习涵盖ES简单查询,聚合查询,所以在创建测试库时会可以涵盖一些个性化字段,用于学习搜索用法 索引创建 几个疑问 1.能否用中文命名 安排:我用"蓝闪test",中英 ...

  8. 专业视频图片水印清除工具丨HitPaw Watermark Remover 2.1.3

    软件下载 MAC/Windows HitPaw Watermark Remover 软件介绍 HitPaw Watermark Remover 是一款能够轻松去除图片视频水印的软件.对于有水印的图片视 ...

  9. 关于matlab2011b 32bit无法成功激活

    matlab2011b版本已经很少见了 下载链接:Matlab_R2011B.Win32.iso_免费高速下载|百度网盘-分享无限制 (baidu.com) 解决办法:(参考原博) (43条消息) M ...

  10. equals的用法的注意事项

    String a="equals的用法"; String b=a.equals("equals的用法")?"相等":"不相等&qu ...