热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

erlang下好用的json库ej

erlang下边的json库用过几个,今天发现了ej库,解析和生成都很方便,下边是使用说明,里边详细的用法看里边的例子就可以了,这里给出的是为什么这么用,里边数据是怎么生成的。1

    erlang 下边的json 库用过几个,今天发现了ej库,解析和生成都很方便,下边是使用说明,里边详细的用法看里边的例子就可以了,这里给出的是为什么这么用,里边数据是怎么生成的。

1. ej  库下载地址是:

https://codeload.github.com/seth/ej/zip/master


2. 使用说明

% menu.json file

%{"menu": {
%"id": "file",
%"value": "File",
%"popup": {
%"menuitem": [
%{"value": "New", "onclick": "CreateNewDoc()"},
%{"value": "Open", "onclick": "OpenDoc()"},
%{"value": "Close", "onclick": "CloseDoc()"}
%]
%}
%}}

% menu.terms

%{struct,
%[{<<"menu">>,
%{struct,
%[{<<"id">>,<<"file">>},
%{<<"value">>,<<"File">>},
%{<<"popup">>,
%{struct,
%[{<<"menuitem">>,
%[{struct,
%[{<<"value">>,<<"New">>},
%{<<"onclick">>,<<"CreateNewDoc()">>}]},
%{struct,
%[{<<"value">>,<<"Open">>},
%{<<"onclick">>,<<"OpenDoc()">>}]},
%{struct,
%[{<<"value">>,<<"Close">>},
%{<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.

% menu.alt_terms
%{[{<<"menu">>,
%{[{<<"id">>,<<"file">>},
%{<<"value">>,<<"File">>},
%{<<"popup">>,
%{[{<<"menuitem">>,
%[{[{<<"value">>,<<"New">>},{<<"onclick">>,<<"CreateNewDoc()">>}]},
%{[{<<"value">>,<<"Open">>},{<<"onclick">>,<<"OpenDoc()">>}]},
%{[{<<"value">>,<<"Close">>},
%{<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.

% 产生测试数据
make_terms(JsonFile) ->
{ok, Json} = file:read_file(JsonFile),
Base = filename:basename(JsonFile),
Decoder = mochijson2:decoder([{object_hook, fun({struct,L}) -> {L} end}]),
AltTerms = Decoder(Json),
Terms = mochijson2:decode(Json),
file:write_file(Base ++ ".terms", io_lib:format("~p.~n", [Terms])),
file:write_file(Base ++ ".alt_terms", io_lib:format("~p.~n", [AltTerms])).

getwid()->
{[{<<"widget">>,
{[{<<"version">>,<<"1">>},
{<<"values">>,[1,2,3,4,5]},
{<<"debug">>,<<"on">>},
{<<"window">>,
{[{<<"title">>,<<"Sample Konfabulator Widget">>},
{<<"name">>,<<"main_window">>},
{<<"width">>,500},
{<<"height">>,500}]}},
{<<"image">>,
{[{<<"src">>,<<"Images/Sun.png">>},
{<<"name">>,<<"sun1">>},
{<<"hOffset">>,250},
{<<"vOffset">>,250},
{<<"alignment">>,<<"center">>}]}},
{<<"text">>,
{[{<<"data">>,<<"Click Here">>},
{<<"size">>,36},
{<<"style">>,<<"bold">>},
{<<"name">>,<<"text1">>},
{<<"hOffset">>,250},
{<<"vOffset">>,100},
{<<"alignment">>,<<"center">>},
{<<"onMouseUp">>,
<<"sun1.opacity = (sun1.opacity / 100) * 90;">>}]}}]}}]}.

getmenu()->
{[{<<"menu">>,
{[{<<"id">>,<<"file">>},
{<<"value">>,<<"File">>},
{<<"popup">>,
{[{<<"menuitem">>,
[{[{<<"value">>,<<"New">>},{<<"onclick">>,<<"CreateNewDoc()">>}]},
{[{<<"value">>,<<"Open">>},{<<"onclick">>,<<"OpenDoc()">>}]},
{[{<<"value">>,<<"Close">>},
{<<"onclick">>,<<"CloseDoc()">>}]}]}]}}]}}]}.

test()->
Wid = getwid(),

{ok, [Widget]} = file:consult("/home/yangzm/tmp/widget.alt_terms"),
Ret = ej:get({"widget", "version"}, Wid),


推荐阅读
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
aaaaaaaaaaa530_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有