使用spray json的一点小经验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spray json的一点小经验相关的知识,希望对你有一定的参考价值。

参考技术A java里面的fastjson,gson,和Jackson是我最熟悉的json序列化框架,用起来没什么问题,接触了scala之后,我看到很多项目使用sprayjson,尤其是akka相关的项目,使用特别多,因为刚接触scala,它的伴生对象和implicit隐式语义会让新手使用spray json的时候,有一点点困惑。

简单说就是json字符串和对象的互转,java里面的对象一般是指bean,有的也叫pojo,scala里面一般指case class的对象。
还有很多框架不提供到bean的转换,而是直接转成JsonObject和JsonArray对象,有的同时支持,比如fastJson,spray json 同样也都支持,基础类叫做JsonValue,具体的还有JSNumber、JSString、JSBoolean等更详细的数据类型,原理其实跟其它java的json框架没有太大的区别

一个json串,调用 parseJson 方法
一个scala对象调用 toJson 方法

都可以转化为一个spray json的语法树对象

这个语法树对象可以打印成json字符串,也可以转化为一个scala对象
转为json字符串:
prettyPrint // or .compactPrint
转为对象 val myObject = jsonAst.convertTo[MyObjectType]

https://github.com/spray/spray-json
具体的参考这个文档即可
调用方式都是死的,无非是convertTo,parseJson,toJson,但是具体怎么转,是需要协议的,框架本身内置了一大堆协议,用于scala基础对象类型的转化,而我们自定义的case class或者class需要我们自己实现转化的方式,这个是我们需要编码的地方。

对于没有显示声明伴生对象的情况,sprayjson给你准备了很多 jsonFormatX,x对应你的case class参数个数,比如

如果有22个参数,那就是jsonFormat22,这些框架提供的jsonFormatX使用的话,需要导入spray.json.DefaultJsonProtocol_,这也是scala隐式的特点
如果显示声明了伴生对象,那么就不能直接 jsonFormat4(Color) 这样写了,上面这个例子里,如果声明了Color伴生对象,那么 jsonFormat4(Color) 里的Color会被理解成Color对象,这时候需要我们提供伴生对象的apply方法,要写成这样

普通class即非case class的情况,多数用到RootJsonFormat,这时候需要我们重写read,write方法,即JSValue和class对象的转换关系
例如:

更复杂的用法,后面陆续补充

linux的一点小随笔

随意写的一些东西,也就为以后自己可能看看。。。

1。vim安装,sudo apt-get install vim-gtk,于是vim就安装好了。当然在我电脑上还出现了gvim,简单的vim配置(etc/vim/vimrc):

"我的设置
set number

"不使用vi默认键盘布局
set nocompatible
set autoindent
set smartindent
set showmatch
"显示状态行
set ruler
set tabstop=4
set cindent
set nobackup
"与windows共享剪贴板
set clipboard+=unnamed
set shiftwidth=4

若是权限不够,则su进入root用户,在切换到vim目录,chmod 777 vimrc,此时则能愉快的进行编辑了。

2。sublime text3,一款神级编辑器,现代化编辑器的代表,不同于vim,emacs的按键晦涩难以掌握,个人觉得vim是十几年前的程序员爱使用的神级编辑器,当然现在能使用好vim的程序员也有很多大神。sublime text3的配置:

"auto_close_tags": false,
    "auto_complete": true,
    "auto_match_enabled": true,
    "bold_folder_labels": true,
    "caret_style": "smooth",
    "color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme",
    "font_size": 13,
    "font_face": "DejaVu Sans Mono",
    "font_options": ["italic"],   
    
    "highlight_line": false,
    "ignored_packages":
    [
        "Vintage"
    ],
    "open_files_in_new_window": false,
    "save_on_focus_lost": true,
    "show_encoding": true,
    "show_full_path": true,
    "tab_size": 4,
    "theme": "Soda Dark 3.sublime-theme",
    "update_check": false

3。本人对编辑器非常喜爱,启动快,体积小,于是前两天尝试了很多主流编辑器,主要看了这个链接:https://www.slant.co/topics/12/~programming-text-editors,将大多数都尝试了一遍,最后发现scite,brackets,vscode等有限的几款比较好,不仅跨平台而且轻便且开源。当然我还是最喜欢sublime text,虽然不是开源的。sublime text3谁用谁知道。

4。终端,系统字体还是觉得DejaVu Sans Mono ,italic 好看,还有就是关于桌面美化上网搜点好看的图片,右键自有设置为桌面背景的选项。系统本身的桌面背景那几张图看起来实在令人开心不起来。。。

5。关于linux最基本的命令,ls显示当前目录下文件夹,cd .. 返回father目录,cd / 返回root目录,cd - 返回上次的目录,cd . 当前目录,cd 或 cd ~返回home/aaa目录,其中aaa为你设置Linux的名称。

就这多吧。。。





























以上是关于使用spray json的一点小经验的主要内容,如果未能解决你的问题,请参考以下文章

关于新家布置的一点小经验——开博第一篇

刚接触SkyLine的一点小收获与感触

关于蚁剑反制深入的分析和利用的一点小思路

关于JSON数据体积优化的一点小心得

新闻发布的一点小总结

实训-mybatis-经验总结2