当前位置: 首页 > 面试题库 >

如何确定性地验证未修改JSON对象?

夏景胜
2023-03-14
问题内容

根据MDN的JSON.stringify文档:

非数组对象的属性不能保证以任何特定顺序进行字符串化。不要依赖于字符串化中同一对象内属性的顺序。

我曾希望通过缓存该对象的字符串化版本,然后将其与该对象的后续字符串化版本进行比较来确定对象是否发生了更改。这似乎比递归遍历对象并进行比较要简单得多。问题在于,由于JSON.stringify函数不是确定性的,因此在对同一对象进行字符串化时,从技术上讲我可以得到不同的字符串。

我还有什么其他选择?还是我必须编写一个讨厌的比较函数来确定对象是否相等?


问题答案:

我很确定这是由于不同的JavaScript引擎在内部跟踪对象属性的方式所致。以这个为例:

var obj = {
"1" : "test",
"0" : "test 2"
};

for(var key in obj) {
    console.log(key);
}

这将在Firefox中记录1、0,但在V8(Chrome和NodeJS)中记录0、1。因此,如果需要确定性,则可能必须遍历将每个键存储在数组中,对数组进行排序,然后通过遍历该数组分别对每个属性进行字符串化。



 类似资料:
  • 问题内容: 我使用sf.json库在Java Web应用程序中映射传入请求的表单数据。 可以说传入请求是http:// localhost:8080 / app / addProfile ,其表单数据为: 服务器端 : 这种方法的主要问题是,如果对结构进行少量修改,则需要修改整个代码。 有没有可以配置验证所需规则的api? 问题答案: 您可以使用Json验证器:-https: //github.c

  • 我使用sf.json库来映射在java中的Web应用程序中传入请求的表单数据。 假设传入请求http://localhost:8080/app/addProfile表单数据为: 服务器端: 这种方法的主要问题是,如果在结构中有微小的修改,那么整个代码都需要修改。 是否有api可以配置验证所需的规则?

  • 该怎么修改代码 验证通过

  • 问题内容: 这是我第一次在laravel中使用验证。我正在尝试对以下json对象应用验证规则。json对象名称是有效负载,下面给出示例。 验证码如下所示,出于测试目的,我将数字验证为数字。当我执行以下代码时,上面的json对象被批准并插入到我的数据库中。相反,它应该给我一个例外,因为我正在传递带有字母数字值的名称,是我做错了什么: 问题答案: 请这样 验证中的字段必须是数字,并且必须具有确切的值长

  • 本文向大家介绍laravel unique验证、确认密码confirmed验证以及密码修改验证的方法,包括了laravel unique验证、确认密码confirmed验证以及密码修改验证的方法的使用技巧和注意事项,需要的朋友参考一下 confirmed 验证字段必须有一个匹配字段 foo_confirmation,例如,如果验证字段是 password,必须输入一个与之匹配的 password_

  • 在C#中是否有任何验证器可以使用,即使没有指令,也会使额外的属性失败?