【问题标题】:Compare Json Response to Json text File将 Json 响应与 Json 文本文件进行比较
【发布时间】:2014-03-31 15:25:54
【问题描述】:

我有一个文件 text.json 和一个 JSON HTTP 响应。检查它们是否相等有什么好处?

这就是我所拥有的,但我认为有更好的解决方案。

JSON.parse(response["data"]).eql?(File.read(text.json))

【问题讨论】:

    标签: ruby json text


    【解决方案1】:

    您需要解析测试的两端:

    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?
    

    【讨论】:

    • JSON 响应数组怎么样? [{},{}].eqls?[{},{}]?
    • 我不确定我是否理解您的问题 - 响应是 JSON 数组,而文件有 JSON 数组?如果 JSON 的顺序很重要,那么可以,否则,您需要调整解决方案...
    • 是的,两者都是数组,顺序无所谓。
    • 如何正确解析/读取以[] 而不是{} 开头的文件? JSON.parse 无法解析数组。
    • 可以:JSON.parse('[{"a":1, "b":2}, {"a":2, "b":1}]') => [{"a"=>1, "b"=>2}, {"a"=>2, "b"=>1}]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2018-06-18
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多