Erlang编码和解码json(jsx)
时间:2019-01-22
本文章向大家介绍Erlang编码和解码json(jsx),主要包括Erlang编码和解码json(jsx)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
jsx是一个用于使用、生成和操作JSON的Erlang应用程序。灵感来源于Yajl
这里肯定有很多人好奇Yaji是什么
Yaji是一个Ruby的json框架,相当于Java的Fastjson
Github: https://github.com/happyshiyu/jsx
几个重要的方法:
- decode
- encode
- is_json
- minify
- prettify
decode JSON解码
1> jsx:decode(<<"{\"library\": \"jsx\", \"awesome\": true}">>).
[{<<"library">>,<<"jsx">>},{<<"awesome">>,true}]
2> jsx:decode(<<"{\"library\": \"jsx\", \"awesome\": true}">>, [return_maps]).
#{<<"awesome">> => true,<<"library">> => <<"jsx">>}
3> jsx:decode(<<"[\"a\",\"list\",\"of\",\"words\"]">>).
[<<"a">>, <<"list">>, <<"of">>, <<"words">>]
将json转换成[{Key, Value}]
decode/1,2
decode(JSON) -> Term
decode(JSON, Opts) -> Term
JSON = json_text()
Term = json_term()
Opts = [option() | labels | {labels, Label} | return_maps]
Label = binary | atom | existing_atom | attempt_atom
Opts有几个选项
- return_maps 返回map(jsx2.9以上版本可用)
- {labels, binary} 解码后的key为binary
- {labels, atom} 解码后的key为atom
-
{labels, existing_atom}
解码后的key为已存在的atom,atom不存在就会报badarg -
{labels, existing_atom}
解码后的key为已存在的atom,如果atom不存在,key就会用binary
jsx2.9版本支持解码成map
encode JSON编码
1> jsx:encode([{<<"library">>,<<"jsx">>},{<<"awesome">>,true}]).
<<"{\"library\": \"jsx\", \"awesome\": true}">>
2> jsx:encode(#{<<"library">> => <<"jsx">>, <<"awesome">> => true}).
<<"{\"awesome\":true,\"library\":\"jsx\"}">>
3> jsx:encode([<<"a">>, <<"list">>, <<"of">>, <<"words">>]).
<<"[\"a\",\"list\",\"of\",\"words\"]">>
将[{Key, Value}]转换成JSON
encode/1,2
encode(Term) -> JSON
encode(Term, Opts) -> JSON
Term = json_term()
JSON = json_text()
Opts = [option() | space | {space, N} | indent | {indent, N}]
N = pos_integer()
Opts有几个选项
-
{space, N} Key,逗号之后N个空格距离
默认为0 -
{indent, N} 换行之后N个缩进 默认为0
默认为0
is_json 判断是否为有效的JSON
1> jsx:is_json(<<"[\"this is json\"]">>).
true
2> jsx:is_json("[\"this is not\"]").
false
3> jsx:is_term([<<"this is a term">>]).
true
4> jsx:is_term([this, is, not]).
false
minify 压缩JSON
1> jsx:minify(<<"{
\"a list\": [
1,
2,
3
]
}">>).
<<"{\"a list\":[1,2,3]}">>
prettify 美化JSON
1> jsx:prettify(<<"{\"a list\":[1,2,3]}">>).
<<"{
\"a list\": [
1,
2,
3
]
}">>
JSON与Erlang数据类型的对应关系
JSON | Erlang |
---|---|
number | integer() and float() |
string | binary() and atom() |
true, false and null | true, false and null |
array | [ ] and [JSON] |
object | #{}, [{}] and [{binary() OR atom() OR integer(), JSON}] |
see below | datetime() |
- 使用 Asp.net Future May 2007 开发Silverlight应用
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
- RePractise前端篇: 前端演进史
- 性能优化总结(三):聚合SQL在GIX4中的应用
- ASP.NET AJAX 控件开发基础
- 听我说说我的博客: 月访问量过万的个人IT博客的技术史
- TransactionScope和Enterprise Libray 3.0 Data Access Application Block
- 《Python Web开发 - 测试驱动方法》阅后感
- 微信小程序分享——会话服务器和业务服务器合并
- 微信官方开源UI库-WeUI
- ViewFlipper实现多页面切换
- Ubuntu & Fedora Mono 2.8 安装脚本
- android下拉加载更多
- 在 Windows 上安装Rabbit MQ 指南
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode链表之反转链表
- Prometheus监控神器-Kubernetes篇(一)
- Elastic:Elasticsearch 的分片管理策略
- 【Vulnhub】SkyDogCTF
- 「搜索引擎」TF-IDF 文档相关度评分
- 36.Python的字符串方法format
- Cypress系列(43)- wait() 命令详解
- Docker常用方法总结
- graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
- graph attention network(ICLR2018)官方代码详解(tensorflow)
- 在SAP Spartacus产品明细页面用outlet显示自定义数据
- 如何在SAP Spartacus自定义Component里消费数据
- 使用ConfigModule.withConfig替换SAP Spartacus标准Component
- pod 资源对象
- 在Java8的foreach()中使用return/break/continue