【发布时间】:2014-03-31 15:25:54
【问题描述】:
我有一个文件 text.json 和一个 JSON HTTP 响应。检查它们是否相等有什么好处?
这就是我所拥有的,但我认为有更好的解决方案。
JSON.parse(response["data"]).eql?(File.read(text.json))
【问题讨论】:
我有一个文件 text.json 和一个 JSON HTTP 响应。检查它们是否相等有什么好处?
这就是我所拥有的,但我认为有更好的解决方案。
JSON.parse(response["data"]).eql?(File.read(text.json))
【问题讨论】:
您需要解析测试的两端:
JSON.parse(response["data"]).eql?(JSON.parse(File.read(text.json)))
编辑
如果您想测试 JSON 的 array,并且您不确定文件中的顺序是否相同,意思是 [{a:1, b:2}, {a:2, b:1}] 应该等于 [{a:2, b:1}, {a:1, b:2}],您'首先需要对它们进行排序(更多技术请参见here):
JSON.parse(response["data"]).sort.eql?(JSON.parse(File.read(text.json)).sort)
编辑 2
由于Hashes 排序不好,上述方法不起作用。您可以使用其他技术之一:
from_response = JSON.parse(response["data"])
from_file = JSON.parse(File.read(text.json))
(from_response & from_file) == from_response
(from_response - from_file).empty?
【讨论】:
[{},{}].eqls?[{},{}]?
[] 而不是{} 开头的文件? JSON.parse 无法解析数组。
JSON.parse('[{"a":1, "b":2}, {"a":2, "b":1}]') => [{"a"=>1, "b"=>2}, {"a"=>2, "b"=>1}]