我最近在面试中收到以下问题。
如何缩小 JSON 响应?
{
name: "sample name",
product: "sample product",
address: "sample address"
}
我不知道如何缩小 JSON 及其背后的实现。 谁能解释一下吗?
提前致谢。
您可以解析 JSON,然后立即重新序列化解析后的对象:
var myJson = `{
"name": "sample name",
"product": "sample product",
"address": "sample address"
}`;
// 'Minifying' the JSON string is most easily achieved using the built-in
// functions in the JSON namespace:
var minified = JSON.stringify(JSON.parse(myJson));
document.body.innerHTML = 'Result:<br>' + minified;
您必须在服务器端执行缩小操作才能改善响应大小。我想大多数语言都支持与上面的代码片段等效的内容。例如,在 php 中可能会这样写(当然,如果您的服务器运行 php):
$myJson = '{
"name": "sample name",
"product": "sample product",
"address": "sample address"
}';
$minified = json_encode(json_decode($myJson));
最明显的方法是去除空白。除此之外,您还可以将键映射为较短的内容,例如 a、b、c。
如果你想成为一个混蛋;你可以告诉他们有效的 json 的键周围会有引号。这似乎是一个js对象,而不是json。
另一种方法可能是将其创建为带有隐式键的数组 - 基本上数组中的第一项映射到键“名称”,第二个映射到“产品”等 - 这要求消息的发送者和接收者准确地知道键的顺序,因此在您的示例中可以减少为
[“样品名称”,“样品产品”,“样品地址”]
你真的无法让它比这更短。如果您有带有子键的复杂对象,您可以使用嵌套多维数组,例如。
["样品名称","样品产品",["样品地址1","样品地址2"]]
对于多人游戏服务器网络等事物来说,这将是一个不错的选择,其中消息大小是减少延迟的主要因素,并且客户端和服务器都知道消息的结构。
它不是严格意义上的 Json,但有时你必须使用实用的解决方案来提高性能。