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()方法: 
 |