首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenStruct解析json数组

用OpenStruct解析json数组
EN

Stack Overflow用户
提问于 2016-11-30 17:03:06
回答 1查看 3.8K关注 0票数 2

我试图用OpenStruct解析一个json文件。Json文件有一个技能数组。当我解析它时,我会得到一些额外的“垃圾”返回。我该怎么摆脱它?

json

代码语言:javascript
复制
{
      "Job": "My Job 1",

      "Skills": [{ "Name": "Name 1", "ClusterName": "Cluster Name 1 Skills"},{ "Name": "Name 2", "ClusterName": "Cluster Name 2 Skills"}]
}

require 'ostruct'
require 'json'


json = File.read('1.json')
job = JSON.parse(json, object_class: OpenStruct)

puts job.Skills


#<OpenStruct Name="Name 1", ClusterName="Cluster Name 1 Skills">
#<OpenStruct Name="Name 2", ClusterName="Cluster Name 2 Skills">
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-30 17:23:05

如果说是垃圾,您指的是#<OpenStruct">,这就是Ruby在使用puts调用时表示对象的方式。它对于开发和调试非常有用,它使我们更容易理解字符串、数组、哈希和OpenStruct之间的区别。

如果您只想显示名称和群集名称,而不显示其他任何内容:

代码语言:javascript
复制
puts job.Job
job.Skills.each do |skill|
  puts skill.Name
  puts skill.ClusterName
end

它返回:

代码语言:javascript
复制
My Job 1
Name 1
Cluster Name 1 Skills
Name 2
Cluster Name 2 Skills

编辑:

当您使用job = JSON.parse(json, object_class: OpenStruct)时,您的作业变量将变成一个OpenStruct Ruby对象,该对象是从json文件中创建的。

但是,它与json无关:它不再是json对象了,所以您不能只将它写回.json文件,并期望它具有正确的语法。

OpenStruct似乎不能很好地处理to_json,所以最好删除object_class: OpenStruct,只处理散列和数组。

这段代码读取1.json,将其转换为Ruby,添加技能,修改作业名,将对象写入2.json,并以JSON的形式再次读取对象,以检查一切是否正常。

代码语言:javascript
复制
require 'json'

json = File.read('1.json')
job = JSON.parse(json)

job["Skills"] << {"Name" => "Name 3", "ClusterName" => "Cluster Name 3 Skills"}
job["Job"] += " (modified version)"

# job[:Fa] = 'blah'

File.open('2.json', 'w'){|out|
  out.puts job.to_json
} 

require 'pp'
pp JSON.parse(File.read('2.json'))

# {"Job"=>"My Job 1 (modified version)",
# "Skills"=>
#  [{"Name"=>"Name 1", "ClusterName"=>"Cluster Name 1 Skills"},
#   {"Name"=>"Name 2", "ClusterName"=>"Cluster Name 2 Skills"},
#   {"Name"=>"Name 3", "ClusterName"=>"Cluster Name 3 Skills"}]}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40894111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档