客户端将EDN转换为JSON(HTML5应用程序使用的Datomic数据)
Client-side transform EDN to JSON (Datomic data consumed by HTML5 app)
我正在实现从HTML5应用程序到Datomic数据库的基本端到端功能。第一种调用是让客户端直接对DatomicRESTneneneba API进行AJAX调用(http://docs.datomic.com/rest.html)。
这种方法需要解决的问题是,数据在EDN中返回,而客户端应用程序希望使用JSON。
我可以看到在客户端上使用Javascript可以实现这一点,例如,使用一些库代码来翻译EDN(例如,我发现jsedn-https://www.npmjs.com/package/jsedn)
有人有使用Javascript做这样的事情的经验吗?或者,是否更普遍地接受EDN到JSON应该在Clojure/Clojuescrapt领域(客户端或服务器端)中完成,如http://swannodette.github.io/2014/07/26/transit--clojurescript/?
感谢
Phil
【编辑2015年3月4日-澄清:通过客户端Clojuescrapt,我想到了一些类似于将EDN转换为JSON的CLJS代码,将其编译为JS,然后将其用作客户端库。]
你提到的jsedn项目没有任何反对意见,但它已经两年没有提交了,而且有几个长期存在的问题/PR没有得到解决:我会厌倦依赖它。
通过创建一个新的clojurescript项目和^:export
,您可以很容易地实现您所追求的目标,该函数解析传入的edn并抛出JS对象(因为没有充分的理由取消对edn的序列化,将其序列化为JSON,然后再次取消对其的序列化!):
(ns app.edn (:require [cljs.reader :as r]))
(defn ^:export read-edn [s]
(let [data (r/read-string s)]
; Log/prettify for JS/whatever
(clj->js data)))
编译它,需要JS中的文件,它将在app.edn.read_edn()
上可用。
如注释所示,以下是我为实现@SLD的正确答案而采取的全部步骤,以防任何人都能从细节中受益。
1) 从上面的答案中获取cljs代码。
2) 创建一个要在生成中使用的project.clj文件。我发现我不得不使用选项
:优化:空白
因此生成的代码对我来说是有意义的(并将加载在RequireJS中)
3) 使用命令
lein-cljsbuild一次
构建js文件。控制台输出将指示主生成文件的名称,该文件是project.clj 中指定的文件
4) (如果使用RequireJS)在RequireJS配置的"路径"中添加生成的文件
5) (如果使用RequireJS)为生成的文件添加一个"shim"条目,因为它不是模块。要获得正确的导出值,请查看3)中生成的js文件,并查看正在导出的全局对象。将该全局对象的名称添加为填充程序的"导出"值。
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 画布数据到图像
- 使用jquery将mysql数据获取到新的表行中
- 使用html中的外部javascript进行数据验证
- 有时数据是't显示在浏览器中
- React中的数据集表示
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 客户端将EDN转换为JSON(HTML5应用程序使用的Datomic数据)