我正在尝试使用ruby在JSON文件中写入/附加一些数据。在以正确格式在JSON文件中写入数据时,我遇到了问题。我已经将值创建并存储在temphash中。我想在现有JSON文件中附加temphash的内容。我正在通过以下方式做到这一点:
tempHash = {"Group_Name" => @GroupName, "Group_Logo_Code" => @GroupLogoCode }
json = File.read('public/group.json')
secondJsonArray = JSON.parse(json)
secondJsonHash = Hash[*secondJsonArray]
jsonHash = []
jsonHash << secondJsonHash
jsonHash << tempHash
File.open("public/group.json","w") do |f|
f.puts JSON.pretty_generate(jsonHash)
end
这将创建格式错误的JSON。我没有得到预期格式的JSON
以下是我的期望:
[
{
"Group_Name": "Group Name",
"Group_Logo_Code": "Group Logo code"
},
{
"Group_Name": "Group Name",
"Group_Logo_Code": "Group Logo code"
},
{
"Group_Name": "Group Name",
"Group_Logo_Code": "Group Logo code"
},
]
以下是我得到的:
[
{
"{\"{\\\"Group_Name\\\"=>\\\"Group Name\\\", \\\"Group_Logo_Code\\\"=>\\\"Group Logo code\\\"}\"=>{\"Group_Name\"=>\"Group Name\", \"Group_Logo_Code\"=>\"Group Logo code\"}}": {
"Group_Name": "Group Name",
"Group_Logo_Code": "Group Logo code"
}
},
{
"Group_Name": "Group Name",
"Group_Logo_Code": "Group Logo code"
}
]
请让我知道是否有更好的方法可以做到这一点。谁能帮我解决这个问题。提前致谢。
Uri Agassi的代码很完美,但是我想解释一下OP代码中出了什么问题。
所述Hash[]
期望的阵列key, value
(或者作为单独的参数或数组的数组)对:
Hash[:a, 1, :b, 2] # => {:a=>1, :b=>2}
Hash[[[:a,1], [:b,2]]] # => {:a=>1, :b=>2}
但是原始的JSON包含哈希数组,就像简化的情况一样,该数组被解析为相应的Ruby对象:
[{:a => 1}, {:b => 2}]
在*
上述数组上使用Ruby splat运算符时:
Hash[ *[{:a => 1}, {:b => 2}] ]
您可以有效地将单独的哈希作为键值对提供给Hash构造函数:
Hash[ {:a => 1}, {:b => 2} ] # => {{:a=>1} => {:b=>2}}
因此,从本质上讲,您所需要的就是:将一个哈希数组变成一个哈希哈希,然后将其添加到一个空白数组中,并添加另一个哈希。
正确的解决方案
只是为了使原始代码以最少的更改即可工作(但仍请看一下Uri的解决方案):
tempHash = {"Group_Name" => @GroupName, "Group_Logo_Code" => @GroupLogoCode }
json = File.read('public/group.json')
secondJsonArray = JSON.parse(json)
secondJsonArray << tempHash
File.open("public/group.json","w") do |f|
f.puts JSON.pretty_generate(secondJsonArray)
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句