http://4096.info/2014/05/28/mochiweb%E4%B8%8Ecowboy%E4%BD%BF%E7%94%A8json/

服务器原来的socket实现机制更改为ranch了,这样可以专注维护自己的事情了。其实,之 所以采用ranch是因为我使用bigwig来在网页中对状态进行监控,而bigwig使用的是cowboy 和ranch,cowboy也使用的是ranch,这样,代码中就存在了两个http的框架,mochiweb和 cowboy,而看了ranch的结构,感觉很不错,就将socket服务器也转换为基于ranch架构了。 mochiweb单独一个模块来进行http服务感觉重复,因此就决定将mochiweb从模块中去除,转 为cowboy。

一切基本都很顺利,但服务器和网页的数据交互总是有问题,数据交互使用的是json格式, mochiweb带有自己的将erlang数据转换为json的方法,cowboy使用的jsx,代码分别为

mochijson2:encode([{success, true}, {root, []}]),
jsx:term_to_json([{success, true},{root, []}]),

看上去很一致吧,我也以为不会有什么大问题,然后碰到了下面的格式

Data=[{"ID", 1},
{<<"name">>, <<"zhangsan">>
}].

mochiweb侧输出的是:

“{\”ID\”:1,\”name\”:\”zhangsan\”}”

而jsx侧输出的是:

“[{\”_type\”:\”tuple\”,\”data\”:[\”ID\”,1]},{\”_type\”:\”tuple\”,\”data\”:[\”name\”,\”zhangsan\”]}]”

如果想要和mochiweb输出表现一致的话,Data需要使用下面的方式:

% 方法1(推荐)
Data=[{<<"ID">>, 1},
{<<"name">>, <<"zhangsan">>
}].
%方法2
Data2=[{'ID', 1},
{'name', <<"zhangsan">>
}].

很明显不是我想要的数据,通过调查,发现jsx有以下的限制:

作为json索引的字段名称,不能是字符串list,如果为atom或者binary,则和mochiweb的输出 一致,也基本上和理解上一致,如果为字符串list,则jsx认为这个是一个数组,这可能是 因为erlang并没有真正意义上的字符串,字符串在erlang中是用list表示的吧。

最新文章

  1. console 输出信息美化
  2. python 中的高级函数reduce()
  3. 每天一个 Linux 命令(14):head 命令
  4. unity meshrender理解
  5. ios开发随笔第一篇-button,label按钮的一些属性的使用
  6. JQuery基础教程:事件(上)
  7. 踩过的坑系列之InputStream.read(byte[])方法
  8. phpcms:七、list.html
  9. Linux IPC实践(2) --匿名PIPE
  10. Excel--按内容分页打印
  11. Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理
  12. seller vue 编写接口请求【mock数据】
  13. JAVA的设计模式之装饰设计模式
  14. Linux - DNF包管理
  15. shell变量常用方法
  16. 目的可疑,但方法非常值得学习的书——leo鉴书56
  17. webpack-dev-server的自动更新配置
  18. Uniprot 数据库-最常用的蛋白质数据库
  19. Asp.NET 与 WebApi 共享Session
  20. 微信开发 获取AccessToken

热门文章

  1. 微信支付v2开发(10) 全网发布
  2. Chome 浏览器,您的连接不是私密连接
  3. loadrunner监控linux之linux下安装rpc
  4. 51Nod——N1082 与7无关的数
  5. COGS——C2274. [HEOI 2016] tree
  6. jquery设置attr属性值
  7. Virtualizing memory type
  8. [Vue] Load components when needed with Vue async components
  9. 折叠table中的tr
  10. [Node] Run Local DevDependencies from the Command Line with npx