• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Ruby中嵌套对象转换成json的方法

Ruby中嵌套对象转换成json的方法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了ruby json,ruby,ruby碧玺,ruby woo口红,mac ruby woo口红等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

JSON由于其数据结构简单便利,已逐渐成为了互联网上的主流数据交换的数据格式。

在讨论嵌套对象(Nested Object)的JSON转换方法之前,我们先看简单的ruby JSON转换。
首先,ruby对象转换为JSON字符串:

    def initialize(var1)

        @var1 = var1

    end


    def to_json(*a)

        {

            "json_class" => self.class,

            "data" => {"var1" => @var1}

        }.to_json(*a)

    end


    def self.json_create(json_str)

        new(json_str["data"]["var1"])

    end

end


obj1 = Obj1.new("i am obj1")


#obj1 to JSON string

json_str = obj1.to_json

puts "JSON string of obj1 = #{json_str}"


#JSON string to obj1

obj11 = JSON.parse(json_str)

puts "ob1 from json string = #{obj11.var1}"
</div>


上面代码我们可以看到,ruby与JSON string之间的转换,关键有三个点:

#引入json库,才能有下面两个方法,json是通过open class的方式,给Hash对象加上了to_json(*a)方法,关于ruby的open class参考支持Open Class特性的编程语言中的开闭原则(Open-Closed Principle)
1)require ‘json'

#定义对象转为JSON string的to_json(*a)方法,其实现是使用Hash对象的to_json(*a)方法
2)def to_json(*a)

#定义从JSON string构造对象的json_create方法,此方法是类方法
3)def self.json_create(json_str)

上面三点是Ruby中实现JSON string互相转换的基本要求。

代码运行结果为:

ob1 from json string = i am obj1
</div>


现在我们来看嵌套对象的JSON string转换:


require 'json'


class Obj1

    def initialize(var1)

        @var1 = var1

    end


    def to_json(*a)

        {

            "json_class" => self.class,

            "data" => {"var1" => @var1}

        }.to_json(*a)

    end


    def self.json_create(json_str)

        new(json_str["data"]["var1"])

    end


    attr_reader :var1

end


class Obj2

    def initialize(var2)

        @var2 = var2

    end


    def to_json(*a)

        {

            "json_class" => self.class,

            "data" => {"var2" => @var2}

        }.to_json(*a)

    end


    def self.json_create(json_str)

        new(json_str["data"]["var2"])

    end


    attr_reader :var2

end


class Obj

    def initialize(obj1, obj2)

        @obj1 = obj1

        @obj2 = obj2

    end


    def to_json(*a)

        {

            "json_class" => self.class,

            "data" => {"obj1" => @obj1.to_json, "obj2" => @obj2.to_json}

        }.to_json(*a)

    end


    def self.json_create(json_str)

        new(json_str["data"]["obj1"], json_str["data"]["obj2"])

    end


    def to_s

        "Hi, i am obj"

    end


    attr_reader :obj1, :obj2

end


obj1 = Obj1.new("i am obj1")

obj2 = Obj2.new("i am obj2")

obj = Obj.new(obj1,obj2)


obj_json_str = obj.to_json

puts "JSON string of obj = #{obj_json_str}"


obj_1 = JSON.parse(obj_json_str)

puts "obj_1 from json string , obj1.class = #{obj_1.obj1.class}, obj2.class = #{obj_1.obj2.class}"
</div>


上面代码中,嵌套对象我们惯性思维,是先将对象自己转换为JSON string:

上面代码输出:

obj_1 from json string , obj1.class = String, obj2.class = String
</div>

我们注意到,被嵌套的对象转换为JSON string后,多了一个反斜杠 \ :

且,JSON string转换后,obj对象中嵌套的对象obj1和obj2,其类型都为String,而不是期望的Obj1和Obj2类型

实际上,这里是惯性思维害人,被嵌套的对象,不需要调用其to_json方法。
因此将Obj类的to_json代码:

代码如下:</div>

您可能想查找下面的文章:

  • Ruby中嵌套对象转换成json的方法
  • 使用Ruby来处理JSON的简单教程

相关文章

  • 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
  • Ruby入门介绍第1/5页
  • ruby+nokogori抓取糗事百科前10页并存储进数据库示例
  • RVM安装和使用总结笔记
  • Ruby中创建字符串的一些技巧小结
  • 优化Ruby脚本效率实例分享
  • 在Ruby中处理XML和XSLT以及XPath的简单教程
  • Ruby on Rails在Ping ++ 平台实现支付
  • Ruby入门点滴-Ruby的安装
  • Ruby中关于模块的一些基础知识

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 快速正确的安装 Ruby, Rails 运行环境
    • 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
    • Windows下Ruby+Watir自动化测试的环境搭建及数据读取
    • Rails应用程序中同时修改操作冲突问题的解决方案
    • ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)
    • 使用Ruby程序实现web信息抓取的教程
    • Ruby中任务构建工具rake的入门学习教程
    • Ruby迭代器的7种技巧分享
    • Ruby on Rails实现最基本的用户注册和登录功能的教程
    • 在Ruby on Rails中使用Markdown的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有