亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby中嵌套對象轉換成json的方法

2020-10-29 19:45:38
字體:
來源:轉載
供稿:網友

JSON由于其數據結構簡單便利,已逐漸成為了互聯網上的主流數據交換的數據格式。

在討論嵌套對象(Nested Object)的JSON轉換方法之前,我們先看簡單的ruby JSON轉換。
首先,ruby對象轉換為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

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}"


上面代碼我們可以看到,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互相轉換的基本要求。

代碼運行結果為:

復制代碼 代碼如下:

JSON string of obj1 = {"json_class":"Obj1","data":{"var1":"i am obj1"}}

ob1 from json string = i am obj1


現在我們來看嵌套對象的JSON string轉換:

復制代碼 代碼如下:

#!/usr/local/ruby/bin/ruby


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}"


上面代碼中,嵌套對象我們慣性思維,是先將對象自己轉換為JSON string:

復制代碼 代碼如下:

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

上面代碼輸出:

復制代碼 代碼如下:

JSON string of obj = {"json_class":"Obj","data":{"obj1":"{/"json_class/":/"Obj1/",/"data/":{/"var1/":/"i am obj1/"}}","obj2":"{/"json_class/":/"Obj2/",/"data/":{/"var2/":/"i am obj2/"}}"}}

obj_1 from json string , obj1.class = String, obj2.class = String

我們注意到,被嵌套的對象轉換為JSON string后,多了一個反斜杠 / :

復制代碼 代碼如下:

JSON string of obj = {"json_class":"Obj","data":{"obj1":"{/"json_class/":/"Obj1/",/"data/":{/"var1/":/"i am obj1/"}}","obj2":"{/"json_class/":/"Obj2/",/"data/":{/"var2/":/"i am obj2/"}}"}}

且,JSON string轉換后,obj對象中嵌套的對象obj1和obj2,其類型都為String,而不是期望的Obj1和Obj2類型

復制代碼 代碼如下:

obj_1 from json string , obj1.class = String, obj2.class = String

實際上,這里是慣性思維害人,被嵌套的對象,不需要調用其to_json方法。
因此將Obj類的to_json代碼:

復制代碼 代碼如下:

    def to_json(*a)

        {

            "json_class" => self.class,

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

        }.to_json(*a)

    end

修正為:

復制代碼 代碼如下:

    def to_json(*a)

        {

            "json_class" => self.class,

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

        }.to_json(*a)

    end

然后,運行代碼,可以看到預期的輸出:

復制代碼 代碼如下:

JSON string of obj = {"json_class":"Obj","data":{"obj1":{"json_class":"Obj1","data":{"var1":"i am obj1"}},"obj2":{"json_class":"Obj2","data":{"var2":"i am obj2"}}}}

obj_1 from json string = {"json_class"=>"Obj", "data"=>{"obj1"=>#, "obj2"=>#}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线播放| 97不卡在线视频| 日本欧美黄网站| 国产精品视频免费观看www| 亚洲国内精品在线| 插插插亚洲综合网| 国产亚洲视频在线观看| 国产精品成人aaaaa网站| 欧美中文字幕在线观看| 在线观看成人黄色| 欧美日韩一区二区三区| 国产精品人人做人人爽| 综合激情国产一区| 欧美精品做受xxx性少妇| 国产视频精品xxxx| 91久久久久久久久久久| 成人免费淫片aa视频免费| 国产精品成人一区二区三区吃奶| 国产日韩在线精品av| 亚洲人成亚洲人成在线观看| 久久男人资源视频| 国产精品福利小视频| 欧美日韩激情网| 国产又爽又黄的激情精品视频| 国产精品男人的天堂| 国产精品久久久久av免费| 欧美一区二区三区艳史| 狠狠躁夜夜躁人人爽天天天天97| 亚洲中国色老太| 亚洲va码欧洲m码| 欧美性猛交xxxx久久久| 亚洲一区二区三区在线视频| 精品亚洲一区二区三区四区五区| 91沈先生在线观看| 亚洲欧美色图片| 欧洲美女免费图片一区| 亚洲国产成人在线播放| 日韩男女性生活视频| 日韩av在线一区| 热久久美女精品天天吊色| 久久久久久久国产| 亚洲大胆人体视频| 欧美在线免费观看| 98精品国产自产在线观看| 国产精品一区二区3区| 亚洲第一精品自拍| 国产免费一区二区三区在线观看| 欧美激情xxxxx| 亚洲精品91美女久久久久久久| 国产精品自拍偷拍| 欧美成人一区在线| 国产精品男人爽免费视频1| 国产欧美精品在线播放| 国产精品亚洲精品| 亚洲在线观看视频网站| 国产精品最新在线观看| 91麻豆国产语对白在线观看| 国产精品老女人视频| 国产午夜精品理论片a级探花| 美女av一区二区| 91精品国产色综合| 最近2019中文字幕在线高清| 欧美日韩国产在线播放| 欧美乱人伦中文字幕在线| 精品久久久久久久久久久久久久| 18一19gay欧美视频网站| 国产日韩欧美在线| 精品国产一区二区三区久久久狼| 亚洲天堂日韩电影| 成年人精品视频| 欧美亚洲国产另类| 国产欧美日韩免费| 欧美日韩中文字幕在线视频| 久久久久久久久久久网站| 色综合色综合久久综合频道88| www日韩中文字幕在线看| 国产精品久久久久免费a∨大胸| 九九热这里只有精品免费看| 成人免费自拍视频| 亚洲福利在线观看| 久久免费视频在线| 久久国内精品一国内精品| 国产精品黄页免费高清在线观看| 粉嫩老牛aⅴ一区二区三区| 久久天天躁狠狠躁老女人| 欧美激情xxxx性bbbb| 91久久久亚洲精品| 日韩欧美国产黄色| 91色精品视频在线| 亚洲精品永久免费| 国内精品伊人久久| 91精品久久久久久久久不口人| 中文字幕欧美亚洲| 91精品国产网站| 视频在线一区二区| 欧美性视频精品| 81精品国产乱码久久久久久| 欧美精品videossex性护士| 97色在线视频| 国产日韩欧美在线播放| 成人免费大片黄在线播放| 亚洲国产成人av在线| 亚洲伊人一本大道中文字幕| 欧美激情欧美激情在线五月| 欧美与欧洲交xxxx免费观看| 中文字幕久久久| 欧美国产一区二区三区| 欧美日韩性生活视频| 国产视频久久久| 在线丨暗呦小u女国产精品| 日韩av第一页| 一区二区在线免费视频| 日韩一级裸体免费视频| 亚洲石原莉奈一区二区在线观看| 成人激情视频网| 最近中文字幕mv在线一区二区三区四区| 日韩黄在线观看| 日韩毛片中文字幕| 欧美三级xxx| 欧美精品久久久久久久免费观看| 奇米一区二区三区四区久久| 懂色av影视一区二区三区| 日韩成人在线电影网| 九九热99久久久国产盗摄| 日韩美女视频免费在线观看| 亚洲欧洲免费视频| 色综合视频一区中文字幕| 国产精品十八以下禁看| 成人网中文字幕| 国产精品一区二区性色av| 一区二区三区四区视频| 欧美一级淫片videoshd| 日本欧美爱爱爱| **欧美日韩vr在线| 日韩av电影手机在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 欧美中文字幕视频在线观看| 国产精品av网站| 亚洲国产古装精品网站| 中文字幕日韩欧美精品在线观看| 亚洲国产成人精品久久| 久久精品国产欧美亚洲人人爽| 精品久久久久久久久中文字幕| 国产精品日日做人人爱| 亚洲区在线播放| 国产精品视频自在线| 国产精品爽黄69天堂a| 日韩av免费网站| 91精品久久久久久久久青青| 久久精品久久精品亚洲人| 国产女同一区二区| 久久久久久18| 亚洲成人中文字幕| 尤物精品国产第一福利三区| 国产欧美一区二区白浆黑人| 欧美在线观看网址综合| 91精品国产自产在线观看永久| 欧美在线视频免费播放| 亚洲精品之草原avav久久| 日韩精品小视频| 国产精品久久综合av爱欲tv| 欧美成aaa人片在线观看蜜臀| 亚洲韩国日本中文字幕| 国产精品久久久久久亚洲影视|