json格式在ruby和rails中的注意事项

  #虚拟网络拓扑的json数据
  def topodata
    #@vnic = Vnic.all
	#flash.now[:notice] = ‘Message sent!‘
	#flash.now[:alert] = ‘Message sent!‘
	simple_json = {
		nodes: [{ name: ‘bob‘, age: "22", awesome: "true" }, { name: ‘bob‘, age: 22, awesome:true }],
		links: [{ name: ‘bob‘, age: "22", awesome: "true" }, { name: ‘bob‘, age: 22, awesome:true }]
	}
	vnet = Vnet.find(:all, :select => ‘id,name,vswitch_id‘)
	vm = VirtualMachine.find(:all, :select => ‘id,hostname,virtual_machine_container_id‘)
	vmc = VirtualMachineContainer.find(:all, :select => ‘id,hostname‘)
    vswitch = Vswitch.find(:all, :select => ‘id,uuid,virtual_machine_container_id,vnet_id,name‘)  #vswitch 和 vmc有什么关系?
	vnic = Vnic.find(:all, :select => ‘id,virtual_machine_id,vnet_id‘)
	#把所有的name放入nodes数组中 如:{"name":"vswitch1","type":"vswitch"}
	nodes = Array.new
	for i in 0..vswitch.size-1 do
      nodes.push({
		name: vswitch[i].name.to_s,
		group: 1 #"vswitch"
      })
	end
	for i in 0..vm.size-1 do
      nodes.push({
		name: vm[i].hostname.to_s,
		group: 2 #"vm"
      })
	end
	for i in 0..vmc.size-1 do
      nodes.push({
		name: vmc[i].hostname.to_s,
		group: 3 #"vmc"
      })
	end
	#储存名字和其在nodes中的位置,为了方便edges找到其位置    如:id_hash["vm2"] = 4
	id_hash = Hash.new
	for i in 0..nodes.size-1 do
	  id_hash[nodes[i][:name]] = i
    end
	#edges储存边之间的关系
	#先储存vswitch和vm的关系 => vnic
	links = Array.new
	for i in 0..vnic.size-1 do
      links.push({
		source: id_hash[vm[vnic[i].virtual_machine_id-1].hostname],
		target: id_hash[vswitch[vnet[vnic[i].vnet_id-1].vswitch_id-1].name],
		value: 10,
		des: "vswitch_to_vm"
      })
	end
	#再储存vm和vmc的关系 => vm
	for i in 0..vm.size-1 do
      links.push({
		source: id_hash[vm[i].hostname],
		target: id_hash[vmc[vm[i].virtual_machine_container_id-1].hostname],
		value: 5,
		des: "vm_to_vmc"
      })
	end
	@alljson = {}
	@alljson["nodes"] = nodes
	@alljson["links"] = links
	#flash.now[:alert] = id_hash[vm[2].hostname]
	lsjson = {
  nodes: [
    {name:"Myriel",group:1},
    {name:"Napoleon",group:1},
    {name:"Mlle.Baptistine",group:2},
  ],
  links: [
    {source:0,target:1,value:1},
    {source:1,target:2,value:8},
    {source:2,target:1,value:10},
  ]
}
	respond_to do |format|
      format.html
      format.json { render json: @alljson }  #这里会自动调用to_json
    end
  #render json: lsjson
  #render json: {test: 1}
  end

  

ruby关于json格式的调用

首先json格式注意:

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

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

simple_json = {
		nodes: [{ name: ‘bob‘, age: "22", awesome: "true" }, { name: ‘bob‘, age: 22, awesome:true }],
		links: [{ name: ‘bob‘, age: "22", awesome: "true" }, { name: ‘bob‘, age: 22, awesome:true }]
	}

3、(1)可以直接在controller的方法中直接render,就可以得到json格式的数据,比如
render json: simple_json 

  (2)或者另一种方法也可以,这里的@alljson就是类似上面simple_json格式的数据,当然,如果直接是model里导出来的数据也可以直接用,比如@vnic = Vnic.all
    respond_to do |format|
      format.html
      format.json { render json: @alljson }  #这里会自动调用to_json
    end

4、直接访问url   http://localhost:3000/vnet/topodata.json就可以直接得到json数据了

在rubychina上看到如果在url上想不要后面.json就可以看到json数据的话,就要到route里改resource直接为json数据了, routes里面对特定的resource加上 format: :json    好像是这样。
时间: 2024-08-11 07:22:40

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

理解ruby on rails中的ActiveRecord::Relation

ActiveRecord::Relation是rails3中添加的.rails2中的finders, named_scope, with_scope 等用法,在rails3统一为一种Relation用法. 以下是返回ActiveRecord::Relation的方法: bind create_with distinct eager_load extending from group having includes joins limit lock none offset order preloa

Elasticsearch 的_msearch介绍及在ruby on rails 中的使用

一.基本介绍 _msearch就是multi search API使用的末端,它可以在一个相同的api中去执行多个查询请求. 请求的格式类似于大部API的格式,它的请求格式如下: header\n body\n header\n body\n header可以包含要查询的索引(可以是多个索引),可选的映射类型,还有search_type, preference和routing. body可以包含指定的搜索请求(包括:query.aggregations.from.size等等). 例子见官网:h

Ruby On Rails中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具

做为一个程序员可能在学习技术,了解行业新动态,解决问题时经常需要阅读英文的内容:而像我这样的英文小白就只能借助翻译工具才能理解个大概:不禁经常感慨,英文对学习计算机相关知识太重要了!最近发现IBM的云平台Blumemix,并且提供语言翻译的服务,感觉不错,就拿来研究学习一下:这里就分享一下我的研究学习过程,如何使用Ruby On Rails调用REST API打造自己的在线翻译工具,并演示如何把它发布到云平台上,让每个人都可以通过网络访问使用它. 应用效果展示 您可以通过点击效果图片的链接访问它

ruby on rails 中使用phantomjs,并使用cookie

一.新建项目 rails new app --skip-bundle 完成后修改Gemfile文件:vim Gemfile 把source 修改成taobao或者ruby-china的源. 在这个文件里加入:gem 'phantomjs' 然后运行:bundle install 这样项目就新建完成了. phantomjs需要单独下载,如果不下载,这个gem运行的时候会自动下载,可能会比较慢. 二.生成pdf 创建一个controller在头部加上require 'phantomjs' 在form

ruby on rails 中使用pdfkit生成pdf

说是使用pdfkit,其实做工作的还是wkhtmltopdf. 一.新建项目 rails new mypdf --skip-bundle 进入项目:cd mypdf,打开Gemfile:vim Gemfile 修改source为https://ruby.taobao.com 添加:gem 'pdfkit' 运行bundle install 二.配置 在项目目录下的config/initializers里加上pdfkit.rb文件,修改内容为: PDFKit.configure do |confi

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

//后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Login_jg : System.Web.UI.Page { protected void Page_Load(object sender, EventArg

ruby on rails 中使用phantomjs 生成pdf

一.新建项目 rails new app --skip-bundle 完成后修改Gemfile文件:vim Gemfile 把source 修改成taobao或者ruby-china的源. 在这个文件里加入:gem 'phantomjs' 然后运行:bundle install 这样项目就新建完成了. 二.生成pdf 创建一个controller在头部加上require 'phantomjs',在里面加入一个获取pdf的get方法:get_pdf 在这个方法里加入如下代码: Phantomjs.

Ruby on Rails 中你使用了Kaminari 后,千万不要再引入will_pagination 这个Gem 了

今日做开发的时候发现的这个问题 发现无论怎样配置都不能使用Kaminari 的Per 这个功能,分页大小也固定在了30 最开始还以为是Ransack 这个Gem 影响的,上网搜了很久发现没有 最后仔细检查,原来是Gemfile 里面包含了will_pagination    把它删除之后,一切恢复正常

SQLyog-直接导出JSON格式的数据

      前言:以前做过的一个项目,有这样的一个需求使用搜索引擎来查询对应的区域信息,不过区域信息要先导出来,并且数据格式是JSON格式的,在程序中能实现这个需求,不过下面的这种方法更加的简单,通过SQL+SQLyog工具的特点直接将区域信息以JSON格式的形式导出来! 1:区域表的结构信息 2:区域关系表的结构信息 3:这个SQL语句是本次博文的核心,就是用他来拼出JSON格式的数据的,当然,仔细的看一下的话也比较简单,只是这种思路值得小记一笔 SELECT '{"regionId"