如何使用红宝石在哈希中添加键/值对



我正在使用ruby 2.0.0,目前我有一个带有以下哈希值的demo.json文件:

{
   "users": 
   {
      "@jon" : 
      {
        "name": "pradeep",
        "Email": "pradeep@yahoo.com",
        "area": "@jon",
        "location": "@newyork"
      },
      "@smith" : 
     {
      "name": "Smith",
      "Email": "Joe@yahoo.com",
      "area": "@smith",
      "location": "@lverginia"
     }
  }
}

现在我使用以下代码在对象中获取 JSON 值:

require 'json'
json = File.read('demo.json')
obj = JSON.parse(json)

这里@jon和@smith是用户名,现在我想通过键盘输入获取用户名,并使用相同的键盘获取@jon中的所有其他值。

假设我有一个新用户@david,他的其他值如下:

    "name": "pradeep",
    "Email": "pradeep@yahoo.com",
    "area": "@jon",
    "location": "@newyork"

我想在不删除其他值的情况下将其添加到上面的demo.json文件中,知道我该怎么办吗?

我尝试以这种方式执行此操作:

obj["users"]

但是由于我通过输入获得用户名,所以我无法在"obj"对象上的用户键之后硬编码用户名,希望这是有意义的。

JSON阅读本文。

我会做如下:

require 'json'
json = JSON.parse(File.read("test.json"))
new_information_arry = ["users", "name", "Email", "area", "location"].map do |elem|
   puts "please give the value of #{elem}"
   [elem,gets.chomp]
end
new_information_hash = Hash[new_information_arry[1..-1]]
json['users'][new_information_arry.first.last] = new_information_hash 
File.write("outputfile.json",JSON.pretty_generate(json))

我将以下内容放入我的文件'test.json'

{
   "users": 
   {
      "@jon" : 
      {
        "name": "pradeep",
        "Email": "pradeep@yahoo.com",
        "area": "@jon",
        "location": "@newyork"
      },
      "@smith" : 
     {
      "name": "Smith",
      "Email": "Joe@yahoo.com",
      "area": "@smith",
      "location": "@lverginia"
     }
  }
}

然后我运行上面的代码如下:

please give the value of users
@david
please give the value of name
pradeep
please give the value of Email
pradeep@yahoo.com
please give the value of area
@jon
please give the value of location
@newyor

现在我的输出文件outputfile.json包含:

{
  "users": {
    "@jon": {
      "name": "pradeep",
      "Email": "pradeep@yahoo.com",
      "area": "@jon",
      "location": "@newyork"
    },
    "@smith": {
      "name": "Smith",
      "Email": "Joe@yahoo.com",
      "area": "@smith",
      "location": "@lverginia"
    },
    "@david": {
      "name": "pradeep",
      "Email": "pradeep@yahoo.com",
      "area": "@jon",
      "location": "@newyor"
    }
  }
}

最新更新