是否可以将JSON字符串转换为对象?

mic*_*ael 21 ruby json

可能重复:
在ruby中解析JSON字符串

是否可以将JSON字符串转换为Ruby对象?我想用类似于以下表达式访问其信息:

drawer.stations.tv.header
Run Code Online (Sandbox Code Playgroud)

JSON字符串:

{
  "drawer" : {
    "stations" : {
      "tv" : {
        "header" : "TV Channels",
        "logos" : {
          "one" : "www1",
          "two" : "www2",
          "three" : "www3"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*sev 51

您可以将字符串解析为ruby哈希,然后将其转换为Mash.Mash为您提供类似方法的访问.

require 'json'
require 'hashie'

hash = JSON.parse json_string
obj = Hashie::Mash.new hash
obj.drawer.stations.tv.header # => "TV Channels"
Run Code Online (Sandbox Code Playgroud)

更新

你也可以在没有第三方宝石的情况下使用ruby自己的宝石OpenStruct:

require 'ostruct'
require 'json'

obj = JSON.parse(json_string, object_class: OpenStruct)
obj.drawer.stations.tv.header # => "TV Channels"
Run Code Online (Sandbox Code Playgroud)


小智 9

如果你将这个字符串解析为ruby对象,它将返回一个ruby Hash对象,你可以像这样得到它

  ruby_obj = JSON.parse(json_string)
  ruby_obj['drawer']['stations']['tv']['header']
Run Code Online (Sandbox Code Playgroud)