首页 文章

客户端转换EDN到JSON(HTML5应用程序消耗的数据库数据)

提问于
浏览
4

我正在实现从HTML5应用程序到Datomic数据库的基本端到端功能 . 第一个调用端口是让客户端直接向Datomic REST API(http://docs.datomic.com/rest.html)调用AJAX .

使用这种方法需要解决的问题是数据在EDN中返回,而客户端应用程序想要使用JSON .

我可以看到有可能的方法在客户端上使用Javascript,例如,使用一些库代码来翻译EDN(例如,我发现jsedn - https://www.npmjs.com/package/jsedn

有没有人有使用Javascript做这样的工作的经验?或者,是否更普遍地接受EDN到JSON应该在Clojure / Clojurescript领域(客户端或服务器端)完成,如http://swannodette.github.io/2014/07/26/transit--clojurescript/中所述?

谢谢

菲尔

[编辑04-Mar-15 - 澄清:通过客户端Clojurescript,我正在考虑采用将EDN转换为JSON的CLJS代码,将其编译为JS,然后将其用作客户端库 .

2 回答

  • 3

    没有什么可以反对你提到的jsedn项目,但它在两年内没有看到承诺并且有一些长期存在的问题/公关没有得到解决:我厌倦了依赖它 .

    你可以通过创建一个新的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() 处可用 .

  • 1

    如评论所示,以下是我实施@ SLD正确答案所采取的全部步骤,以防任何人从详细信息中受益 .

    1)从上面的答案中获取cljs代码 .

    2)创建要在构建中使用的project.clj文件 . 我发现我必须使用该选项

    :优化:空白

    这样生成的代码对我来说很有意义(并且会在RequireJS中加载)

    3)使用命令

    lein cljsbuild一次

    构建js文件 . 控制台输出将指示主生成文件的名称,该文件是project.clj中指定的文件

    4)(如果使用RequireJS)在RequireJS配置的“路径”中添加生成的文件

    5)(如果使用RequireJS)为生成的文件添加“shim”条目,因为它不是模块 . 要获得正确的导出值,请查看3)中生成的js文件,并查看正在导出的全局对象 . 将该全局对象的名称添加为垫片的“exports”值 .

相关问题