1. #虚拟网络拓扑的json数据
  2. def topodata
  3. #@vnic = Vnic.all
  4. #flash.now[:notice] = 'Message sent!'
  5. #flash.now[:alert] = 'Message sent!'
  6. simple_json = {
  7. nodes: [{ name: 'bob', age: "22", awesome: "true" }, { name: 'bob', age: 22, awesome:true }],
  8. links: [{ name: 'bob', age: "22", awesome: "true" }, { name: 'bob', age: 22, awesome:true }]
  9. }
  10. vnet = Vnet.find(:all, :select => 'id,name,vswitch_id')
  11. vm = VirtualMachine.find(:all, :select => 'id,hostname,virtual_machine_container_id')
  12. vmc = VirtualMachineContainer.find(:all, :select => 'id,hostname')
  13. vswitch = Vswitch.find(:all, :select => 'id,uuid,virtual_machine_container_id,vnet_id,name') #vswitch 和 vmc有什么关系?
  14. vnic = Vnic.find(:all, :select => 'id,virtual_machine_id,vnet_id')
  15. #把所有的name放入nodes数组中 如:{"name":"vswitch1","type":"vswitch"}
  16. nodes = Array.new
  17. for i in 0..vswitch.size-1 do
  18. nodes.push({
  19. name: vswitch[i].name.to_s,
  20. group: 1 #"vswitch"
  21. })
  22. end
  23. for i in 0..vm.size-1 do
  24. nodes.push({
  25. name: vm[i].hostname.to_s,
  26. group: 2 #"vm"
  27. })
  28. end
  29. for i in 0..vmc.size-1 do
  30. nodes.push({
  31. name: vmc[i].hostname.to_s,
  32. group: 3 #"vmc"
  33. })
  34. end
  35. #储存名字和其在nodes中的位置,为了方便edges找到其位置 如:id_hash["vm2"] = 4
  36. id_hash = Hash.new
  37. for i in 0..nodes.size-1 do
  38. id_hash[nodes[i][:name]] = i
  39. end
  40. #edges储存边之间的关系
  41. #先储存vswitch和vm的关系 => vnic
  42. links = Array.new
  43. for i in 0..vnic.size-1 do
  44. links.push({
  45. source: id_hash[vm[vnic[i].virtual_machine_id-1].hostname],
  46. target: id_hash[vswitch[vnet[vnic[i].vnet_id-1].vswitch_id-1].name],
  47. value: 10,
  48. des: "vswitch_to_vm"
  49. })
  50. end
  51. #再储存vm和vmc的关系 => vm
  52. for i in 0..vm.size-1 do
  53. links.push({
  54. source: id_hash[vm[i].hostname],
  55. target: id_hash[vmc[vm[i].virtual_machine_container_id-1].hostname],
  56. value: 5,
  57. des: "vm_to_vmc"
  58. })
  59. end
  60. @alljson = {}
  61. @alljson["nodes"] = nodes
  62. @alljson["links"] = links
  63. #flash.now[:alert] = id_hash[vm[2].hostname]
  64. lsjson = {
  65. nodes: [
  66. {name:"Myriel",group:1},
  67. {name:"Napoleon",group:1},
  68. {name:"Mlle.Baptistine",group:2},
  69. ],
  70. links: [
  71. {source:0,target:1,value:1},
  72. {source:1,target:2,value:8},
  73. {source:2,target:1,value:10},
  74. ]
  75. }
  76. respond_to do |format|
  77. format.html
  78. format.json { render json: @alljson } #这里会自动调用to_json
  79. end
  80. #render json: lsjson
  81. #render json: {test: 1}
  82. end

  

ruby关于json格式的调用

首先json格式注意:

1、在nodes后面要紧跟:,不能有空格

2、nodes、name这些地方不能用引号括起来,不然不能用ruby转换为json格式

  1. simple_json = {
  2. nodes: [{ name: 'bob', age: "22", awesome: "true" }, { name: 'bob', age: 22, awesome:true }],
  3. links: [{ name: 'bob', age: "22", awesome: "true" }, { name: 'bob', age: 22, awesome:true }]
  4. }
  5.  
  6. 3、(1)可以直接在controller的方法中直接render,就可以得到json格式的数据,比如
  1. render json: simple_json
  2.  
  3. (2)或者另一种方法也可以,这里的@alljson就是类似上面simple_json格式的数据,当然,如果直接是model里导出来的数据也可以直接用,比如@vnic = Vnic.all
  1. respond_to do |format|
  2. format.html
  3. format.json { render json: @alljson } #这里会自动调用to_json
  4. end
  5.  
  6. 4、直接访问url http://localhost:3000/vnet/topodata.json就可以直接得到json数据了
  7.  
  8. rubychina上看到如果在url上想不要后面.json就可以看到json数据的话,就要到route里改resource直接为json数据了, routes里面对特定的resource加上 format: :json 好像是这样。

json格式在ruby和rails中的注意事项的更多相关文章

  1. 【转】Ruby on Rails中select使用方法

    在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...

  2. ruby on rails 中render的

    Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...

  3. json格式数据 ,将数据库中查询的结果转换为json(方式2)

    controller: /*** * 返回所有版本的信息,json的形式返回到前台 * @return */ @RequestMapping(value="/getAllVersion&qu ...

  4. ruby on rails 中render的使用

    最近写ror,因为比较菜,很多东西不知道,只能看一点查一点了 render 先上点搜集的常用方式 render :action => "long_goal", :layout ...

  5. Ruby on Rails中的Rake教程(Rake如何把我灌醉!)

    下面是我们使用Rake任务的例子: 1.给列表中的用户发送邮件 2.每晚数据的计算和报告 3.过期或重新生成缓存 4.备份数据和svn版本(how's this : subversion reposi ...

  6. 理解ruby on rails中的ActiveRecord::Relation

    ActiveRecord::Relation是rails3中添加的.rails2中的finders, named_scope, with_scope 等用法,在rails3统一为一种Relation用 ...

  7. asp.net后台cs中的JSON格式变量在前台Js中调用方法(前后台示例代码)

    //后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  8. asp.net后台cs中的JSON格式变量在前台Js中调用方法

    //后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  9. @ResponseBody//该注解会将返回值转为json格式并放到响应体中返回到前台

随机推荐

  1. Unityclient框架笔记二(组件实体开发模式的思考)

    Unity的Entity-Component-System实现的很美丽,很灵活.许多文章也对这样的组件实体的开发模式倍加推崇.由于它契合这么一条规则:优先使用组合而不是继承. 可是实际开发过程中,限制 ...

  2. hdu 4961 Boring Sum(高效)

    pid=4961" target="_blank" style="">题目链接:hdu 4961 Boring Sum 题目大意:给定ai数组; ...

  3. echarts geo地图坐标转换为页面Offset坐标

    https://github.com/apache/incubator-echarts/issues/2540 代码示例: // 获取系列 ) // 获取地理坐标系实例 var coordSys = ...

  4. 在centos7中用mariadb代替了mysql数据库吗

    从最新版本的linux系统开始(如 Centos7),默认的是 Mariadb而不是mysql!(mysql被闭源厂家收购,有闭源风险) 使用系统自带的repos安装很简单: yum install ...

  5. OpenVpn的ipp.txt文件

    ipp=ip pool我猜得,呵呵 ipp.txt文件中存放上一次连接时,客户端分配的ip地址. ipp.txt用来保存上次的连接状态的,并不能为客户端设置固定ip地址. 该文件的格式为:用户名,ip ...

  6. paip.分布式应用系统java c#.net php的建设方案

    paip.分布式应用系统java c#.net php的建设方案 1. 基础设施的建立 1 2. 本地的的调用API 1 3. 数据的传输 1 4. 代码的传输 1 5. 代码的自动热编译 2 6.  ...

  7. 【Android】21.4 图片动画缩放示例

    分类:C#.Android.VS2015: 创建日期:2016-03-21 一.简介 该例子演示如何动画缩放图片,实现类似"点击看大图"的效果. 二.示例 1.运行截图    2. ...

  8. linux 调试利器gdb, strace, pstack, pstree, lsof

    1) 如何使用strace+pstack利器分析程序性能? http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html 此文有详细 ...

  9. angular学习笔记(四)- input元素的ng-model属性

    input元素的ng-model属性: 用于将input的值和变量的值进行双向绑定 <!DOCTYPE html> <html ng-app> <head> < ...

  10. C++ 11 nullptr关键字

    熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NUL ...