在 Ruby 中,json
库用于解析和生成 JSON(JavaScript 对象表示法)数据。它允许你将 Ruby 对象转换为 JSON 格式,或者将 JSON 格式的数据转换为 Ruby 对象。
1. 加载 JSON 库
要在 Ruby 中使用 JSON,首先需要加载 json
库:
require 'json'
2. 将 Ruby 对象转换为 JSON
可以使用 JSON.generate
或 to_json
方法将 Ruby 数据结构(如哈希、数组等)转换为 JSON 格式。
示例 1:使用 JSON.generate
ruby_hash = { name: "John", age: 30, city: "New York" }
json_string = JSON.generate(ruby_hash)
puts json_string
# 输出: {"name":"John","age":30,"city":"New York"}
示例 2:使用 to_json
(该方法是 json
模块的一部分)
require 'json'
ruby_hash = { name: "John", age: 30, city: "New York" }
json_string = ruby_hash.to_json
puts json_string
# 输出: {"name":"John","age":30,"city":"New York"}
3. 将 JSON 转换为 Ruby 对象
可以使用 JSON.parse
方法将 JSON 字符串转换为 Ruby 对象。
json_string = '{"name":"John","age":30,"city":"New York"}'
ruby_hash = JSON.parse(json_string)
puts ruby_hash
# 输出: {"name"=>"John", "age"=>30, "city"=>"New York"}
4. 处理 JSON 数组
如果你正在处理包含多个对象的 JSON 数组,过程是类似的。
json_string = '[{"name":"John","age":30},{"name":"Jane","age":28}]'
ruby_array = JSON.parse(json_string)
puts ruby_array
# 输出: [{"name"=>"John", "age"=>30}, {"name"=>"Jane", "age"=>28}]
5. 处理 JSON 错误
在解析 JSON 数据时,如果格式无效,你可能会遇到错误。为了优雅地处理错误,最好将解析操作放在 begin-rescue
块中。
begin
invalid_json = '{"name":"John", "age":30' # 缺少闭括号
ruby_object = JSON.parse(invalid_json)
rescue JSON::ParserError => e
puts "解析错误: #{e.message}"
end
6. 漂亮地打印 JSON
如果你希望 JSON 格式更加可读,可以使用 JSON.pretty_generate
方法生成格式化的 JSON。
ruby_hash = { name: "John", age: 30, city: "New York" }
pretty_json = JSON.pretty_generate(ruby_hash)
puts pretty_json
# 输出:
# {
# "name": "John",
# "age": 30,
# "city": "New York"
# }
7. 转换嵌套的 Ruby 对象
json
库也能够处理嵌套的结构,比如包含数组和哈希的对象。
nested_hash = { name: "John", address: { street: "123 Main St", city: "New York" }, friends: ["Jane", "Tom"] }
json_string = nested_hash.to_json
puts json_string
# 输出: {"name":"John","address":{"street":"123 Main St","city":"New York"},"friends":["Jane","Tom"]}
8. 将 JSON 保存到文件
你可以将 JSON 数据保存到文件中,通过将 JSON 字符串写入文件实现。
data = { name: "John", age: 30, city: "New York" }
File.open("data.json", "w") do |f|
f.write(JSON.pretty_generate(data))
end
这会将 JSON 数据以漂亮格式保存到 data.json
文件中。
总结
JSON.generate
或to_json
: 将 Ruby 对象转换为 JSON 格式。JSON.parse
: 将 JSON 字符串转换为 Ruby 对象。JSON.pretty_generate
: 将 Ruby 对象转换为格式化的、可读性强的 JSON。JSON::ParserError
: 处理解析 JSON 时的错误。- 文件操作: 可以将 JSON 数据读写到文件中。
Ruby 的 json
库非常适合用于处理 JSON 数据,尤其是在处理 API、配置文件等 JSON 数据交换格式时非常有用。
发表回复