zoukankan      html  css  js  c++  java
  • MOCHIWEB与COWBOY使用JSON

    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表示的吧。

  • 相关阅读:
    (转)二步实现 远程连接 阿里云SqlServer 2012 数据库服务器
    浅谈C#在网络波动时防重复提交
    面向 Kubernetes 编程: Kubernetes 是下一代操作系统
    C#并行编程(2):.NET线程池
    C#并行编程(1):理解并行
    iOS 动画总结----UIView动画
    iOS开发之各种动画各种页面切面效果
    iOS动画效果和实现
    iOS开发动画(Animation)总结
    iOS开发之传感器
  • 原文地址:https://www.cnblogs.com/fvsfvs123/p/4137061.html
Copyright © 2011-2022 走看看