我们可以在不使用 for.in 的情况下在 javascript 中遍历 json 吗?



如果 json 有效负载包含重复键,我需要抛出 400 错误请求错误。我正在使用下面的代码来获取数组中的所有属性。

var arrayObj = [];
var attrArr = [];
var arr = {
"serviceNumer": "1612045709",
"customerRefNumber": "TCreateS9",
"customerRefNumber": "TCreateS9"
};
for (var key in arr) {
arrayObj.push(key, arr[key]);
}
console.log("arrayObj", arrayObj);
for (var i = 0; i < arrayObj.length; i = i + 2) {
attrArr.push(arrayObj[i]);
}
console.log(attrArr);

当我迭代使用 for..在中,重复的键将被覆盖。因此,请帮助我使用任何替代方法。

JavaScript 对象不能有重复的键。所有密钥都必须是唯一的。 通过以下链接,这将消除您的疑虑 堆栈溢出 JSObj 和 查找和解决重复键的问题

您的 JSON 漏洞无法处理重复的键,

如果从 JSON 中获取对象并将其转换回 JSON,然后将字符串中的冒号数与原始冒号数进行比较。 如果原始键中有重复键,则新 JSON 中的冒号将减少。

这样的检查适合向菜鸟发出警告信息,但它不是防弹的。攻击者可能对字符串值中的冒号使用转义,从而导致计数增加。如果要求很关键,则需要修改 JSON 解析器来执行检查。

JSON 对象不能有重复的键。如果要以字符串形式获取有效负载,则可以执行以下操作:

var input = '{"serviceNumer":"1612045709","customerRefNumber":"TCreateS9","customerRefNumber":"TCreateS9"}';
if(input === JSON.stringify(JSON.parse(input)))
console.log("input has No Duplicate");
else
console.log("input has Duplicate");

这里 JSON.parse 会将输入转换为 JSON 对象并删除重复的键

希望这对您有所帮助:(

你只是不知道,继续做下去

//you can hard code it or write it
var arr = {
"serviceNumer": "1612045709",
"customerRefNumber": "TCreateS9",
"customerRefNumber": "TCreateS93333"
};
//but when you call it it just will show the last element
console.log(arr.customerRefNumber)
/*
its like you say 
var ac = 1
var ac = 3
console.log(ac)
it will show 3
*/
//make it different
var arr2 = {
"serviceNumer": "1612045709",
"customerRefNumber": "TCreateS9",
"customerRefNumber2": "TCreateS9"
};
var a = Object.getOwnPropertyNames(arr).sort()
var b = Object.getOwnPropertyNames(arr2).sort()
console.log(a)
console.log(b)

最新更新