如果我想比较一系列 API 响应的响应复杂性(作为解析和验证响应可能需要多少努力的代理),是否有任何现有的工具或库可以非常有效地做到这一点?还是一段简单的代码?
理想情况下,可以打印出一份快速报告,显示整个结构的深度和广度,以及任何其他可能有用的指标。
{启发式方法是简单地计算、}、[和字符的数量]。当然,这只是一个启发式的方法;在这种方法下,像 json 对象这样的结构{ value: "{[}{}][{{}{}]{}{}{}[}}{}{" }会被认为过于复杂,尽管它的结构非常简单。
let guessJsonComplexity = (json, chars='{}[]')) => {
let count = 0;
for (let char in json) if (chars.includes(char)) count++;
return count / (json.length || 1);
};
Run Code Online (Sandbox Code Playgroud)
如果速度非常重要,您会选择这个答案。
如果您想要更简洁的答案,您几乎肯定需要解析 json!
我们还可以考虑另一种方法。考虑为 json 中可能发生的每种可能现象分配一个“复杂性分数”。例如:
s包含一个字符串;复杂度得分:Math.log(s.length)n包括一个数字;复杂度得分:Math.log(n)如果我们想认为其中一些关系比其他关系更“复杂”,我们甚至可以挑选出不同的关系,例如“数组中包含一个对象”或“数组中包含一个数组”等。例如,如果我们这么认为的话,我们可以说负数是正数的两倍“复杂”。
我们还可以考虑“深度因素”,这使得元素越深入就越重要。
如果我们定义如何对所有这些现象进行评分,我们可以编写一个处理 json 并应用这样的分数的函数:
let guessJsonComplexity = (json, chars='{}[]')) => {
let count = 0;
for (let char in json) if (chars.includes(char)) count++;
return count / (json.length || 1);
};
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关大型 json 对象的子对象的更多详细信息,您getComplexity也可以简单地调用这些子对象。
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |