Ruby处理YAML Ruby的标准库YAML基于Psych:https://ruby-doc.org/stdlib-2.6.2/libdoc/psych/rdoc/Psych.html require yaml之后,为大多数的基本数据类型都提供了to_ yaml()方法,用于将各数据类型的对象转换为y
Ruby处理YAMLRuby的标准库YAML基于Psych:https://ruby-doc.org/stdlib-2.6.2/libdoc/psych/rdoc/Psych.html require 'yaml' 之后,为大多数的基本数据类型都提供了 to_ yaml() 方法,用于将各数据类型的对象转换为yaml格式。 例如:
得到:
也可以使用YAML.dump()方法实现和to_yaml相同的功能,它还可以写入文件。
查看文件:
用YAML.load()从YAML中读取数据:
得到:
如果想让hash的key是符号而非字符串,可以设置选项symbolize_names: true:
需要注意,YAML可以将对象进行序列化,所以有几方面注意事项:
Ruby处理Json数据转为json格式字符串使用JSON.generate()可以将对象或数组转换为JSON格式的数据:
得到:
当require 'json'后,很多ruby类型都具备了一个to_json的方法,可以直接将该类型的数据转换为json数据:
得到:
此外,JSON.dump()也可以将对象转换为JSON格式的字符串,而且它还支持写入文件:
json格式字符串转为Ruby对象要从json格式字符串转为ruby对象,有一些选项可设置,参考https://ruby-doc.org/stdlib-2.7.1/libdoc/json/rdoc/JSON.html#method-i-parse,比如*symbolize_names*选项表示是否将json object中的key解析为符号类型的key,如果设置为false,则解析为字符串的key。 要将json格式的字符串解析为Ruby数据类型(Hash),使用JSON.parse(),
注意,上面的json字符串必须是合理的json数据,比如key必须使用双引号包围而不能使用单引号,字符串必须使用双引号包围,等等。比如"{'name': 'junmajinlong', 'age': 23}"就不是合理的json字符串。 要从json文件中读取json数据并转换为Ruby数据,使用load():
自定义对象的转换方式json支持的数据类型有:
从一种语言的数据转换为Json数据时,如果数据类型也是JSON所支持的,可直接转换,但如果包含了JSON不支持的类型,则可能报错,也可能以一种对象字符串的方式保存,这取决于对应的实现。 可以在对象中定义as_json实例方法来决定对象如何转换为json字符串,再定义类方法from_json()来决定如何从json字符串中恢复为一个对象。 例如,
查看保存的json数据:
定义as_json和frmo_json:
之后要序列化、反序列化该对象,可:
如果是读写json文件,可:
几种JSON解析工具的性能测试测试了json标准库、oj和fast_josnparser解析json的性能,测试项包括:
注:
测试的json字符串数量大约50M。 测试了ruby 2.7.1和ruby 3.0.1两个版本,gem包的版本信息如下:
测试代码:
测试结果: Ruby 2.7.1中:
Ruby 3.0.1中:
性能测试结论:
即:
multi_json有一个名为multi_json的gem包,它提供多种json包的功能,默认采用OJ作为json的适配引擎。它支持下面几种json适配器:
如果oj已被require,则默认采用oj处理json,如果oj没有被require,而是require了yajl,则采用yajl处理json,依次类推。 它提供了load()和dump()方法:
|