Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails中重新格式化JSON_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 如何在rails中重新格式化JSON

Ruby on rails 如何在rails中重新格式化JSON,ruby-on-rails,json,Ruby On Rails,Json,我正在试用rails应用程序中的d3.js,以获得漂亮的图形。我正在尝试的图形之一是a。为了创建这个,JSON需要采用以下格式 { "nodes":[ {"name":"Myriel"}, {"name":"Napoleon"}, {"name":"Mlle.Baptistine"}, {"name":"Mme.Magloire"} ], "links":[ {"source":1,"target":0,"value":1}, {"sourc

我正在试用rails应用程序中的d3.js,以获得漂亮的图形。我正在尝试的图形之一是a。为了创建这个,JSON需要采用以下格式

{
  "nodes":[
    {"name":"Myriel"},
    {"name":"Napoleon"},
    {"name":"Mlle.Baptistine"},
    {"name":"Mme.Magloire"}
 ],
"links":[
    {"source":1,"target":0,"value":1},
    {"source":2,"target":0,"value":8},
    {"source":3,"target":0,"value":10},
    {"source":3,"target":2,"value":6}
]
}
我目前已使用以下查询从数据库生成JSON:

 User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.source, relationships.target,relationships.value")
它是在控制器中创建的,如下所示

 def index
       render :json =>  User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.source, relationships.target,relationships.value")
  end
end
结果如下所示:

[{"name":"Myriel","source":121,"target":1,"value":1},{"name":"Napoleon","source":119,"target":2,"value":2},    {"name":"Myriel","source":121,"target":1,"value":2},{"name":"Myriel","source":121,"target":3,"value":1},{"name":"Mlle.Baptistine","source":122,"target":2,"value":3}]

有没有一种简单的方法可以将我的JSON映射到我需要的内容?

您可以为用户模型编写一个类方法,该方法将根据需要返回JSON

def get_json
  json_data = User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.user_id, relationships.target,relationships.value")

  {
    'nodes' => json_data.collect {|json| json.slice('name')},
    'links' => json_data.collect {|json| json.slice('source', 'target', 'value')}
  }
end

您可以为用户模型编写一个类方法,该方法将根据需要返回json

def get_json
  json_data = User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.user_id, relationships.target,relationships.value")

  {
    'nodes' => json_data.collect {|json| json.slice('name')},
    'links' => json_data.collect {|json| json.slice('source', 'target', 'value')}
  }
end

您可以为用户模型编写一个类方法,该方法将根据需要返回json

def get_json
  json_data = User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.user_id, relationships.target,relationships.value")

  {
    'nodes' => json_data.collect {|json| json.slice('name')},
    'links' => json_data.collect {|json| json.slice('source', 'target', 'value')}
  }
end

您可以为用户模型编写一个类方法,该方法将根据需要返回json

def get_json
  json_data = User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select(" users.name, relationships.user_id, relationships.target,relationships.value")

  {
    'nodes' => json_data.collect {|json| json.slice('name')},
    'links' => json_data.collect {|json| json.slice('source', 'target', 'value')}
  }
end

根据另一个答案中的建议,创建一个类方法:

class User
  def self.including_relationships
    User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select("users.name, relationships.user_id, relationships.target,relationships.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj| 
      obj['nodes'] << a.slice('name')
      obj['links'] << a.slice('source', 'target', 'value')
    end
  end
end

我将该方法命名为
包含关系
,因为它不是真正创建JSON,而是将数据转换为
散列
对象,您可以根据需要命名它。

如另一个答案中所建议,创建一个类方法:

class User
  def self.including_relationships
    User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select("users.name, relationships.user_id, relationships.target,relationships.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj| 
      obj['nodes'] << a.slice('name')
      obj['links'] << a.slice('source', 'target', 'value')
    end
  end
end

我将该方法命名为
包含关系
,因为它不是真正创建JSON,而是将数据转换为
散列
对象,您可以根据需要命名它。

如另一个答案中所建议,创建一个类方法:

class User
  def self.including_relationships
    User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select("users.name, relationships.user_id, relationships.target,relationships.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj| 
      obj['nodes'] << a.slice('name')
      obj['links'] << a.slice('source', 'target', 'value')
    end
  end
end

我将该方法命名为
包含关系
,因为它不是真正创建JSON,而是将数据转换为
散列
对象,您可以根据需要命名它。

如另一个答案中所建议,创建一个类方法:

class User
  def self.including_relationships
    User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select("users.name, relationships.user_id, relationships.target,relationships.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj| 
      obj['nodes'] << a.slice('name')
      obj['links'] << a.slice('source', 'target', 'value')
    end
  end
end


我将该方法命名为
include_relationships
,因为它不是真正创建JSON,而是将数据转换为
Hash
对象,您可以随意命名它。

您可以发布您为从查询创建JSON而编写的代码吗?您可以尝试此
ActiveSupport::JSON.decode(您的结果)
您可以使用PrettyJSONResponse发布您编写的代码以从查询中创建JSON吗?您可以尝试此
ActiveSupport::JSON.decode(您的结果)
您可以使用PrettyJSONResponse发布您编写的代码以从查询中创建JSON吗?您可以尝试此
ActiveSupport::JSON.decode(您的结果)
您可以使用PrettyJSONResponse发布您编写的代码以从查询中创建JSON吗?您可以尝试使用此
ActiveSupport::JSON.decode(您的结果)
您可以使用PrettyJSONResponse在UserController中获取错误名称“index undefined method`source”(这是用户数据库中的第一个名称)。它突出显示了行'links'=>json_data.collect{| json | json.slice('source','target','value')}我在UserController#index未定义的方法'source'中得到了错误NoMethodError(这是用户数据库中的第一个名称)。它突出显示了行'links'=>json_data.collect{| json | json.slice('source','target','value')}我在UserController#index未定义的方法'source'中得到了错误NoMethodError(这是用户数据库中的第一个名称)。它突出显示了行'links'=>json_data.collect{| json | json.slice('source','target','value')}我在UserController#index未定义的方法'source'中得到了错误NoMethodError(这是用户数据库中的第一个名称)。它突出显示行'links'=>json_data.collect{| json | json.slice('source','target','value')}OK。谢谢,这很有效。虽然只有当我理解了slice函数,它根据数组的参数对数组进行切分。换句话说,在我将a.slice('匹配到User.joins语句之前,我一直在出错。因此,我更改了obj['links']OK。谢谢,这很有效。尽管只有在我理解slice函数时,它才根据数组的参数对数组进行切分。换句话说,在匹配a.slice之前,我一直在出错('到User.joins语句。因此我更改了obj['links']好的。谢谢。虽然只有在我理解了slice函数时,它才根据数组的参数对数组进行切分。换句话说,在匹配a.slice('到User.joins语句之前,我一直在出错。因此我更改了obj['links']好的。谢谢。这是有效的。虽然只有在我理解了slice函数时,它才根据数组的参数对数组进行切分。换句话说,在我将a.slice('匹配到User.joins语句之前,我一直在出错。因此,我更改了obj['links']