BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

JSON for Modern C++发布3.1版本

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 罗远航 关注 1 他的粉丝 发布于 2018年2月19日. 估计阅读时间: 4 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

JSON for Modern C++ 3.1版本增加了对Universal Binary JSON(UBJSON)规范和JSON合并补丁(Merge Patch)的支持。

UBJSON是支持Modern C++几种格式之一,它可以减少编码值的大小,加快解码速度。除了UBJSON,CBORMessagePack也同样支持Modern C++。 每种格式都有不同的优势,选择哪种格式取决于你所需要的数据类型。在这三种格式中,UBJSON是唯一完整二进制格式的,这就意味着所有的JSON值都可以转换成UBJSON,并且所有的UBJSON值也都能转换成JSON。

JSON合并补丁格式的作用是声明两个JSON文档之间的差异。这种格式是与HTTP PATCH一起使用的,它能够对资源进行部分更新,而HTTP PUT则用于对资源进行完全替换。JSON合并补丁允许你只对JSON的一部分进行定义,并且将其合并到服务器端。这比使用基本的JSON补丁格式更加方便,基本的JSON补丁格式依赖于一组操作的规范来对原始的JSON文档进行修补。例如:

// a JSON value
json j_document = R"({
  "a": "b",
  "c": {
    "d": "e",
    "f": "g"
  }
})"_json;

// a JSON patch (RFC 6902)
json j_patch_1 = R"([
  { "op": "replace", "path": "/a", "value": "z" },
  { "op": "remove", "path": "/f"}
])"_json;

// a JSON Merge patch (RFC 7386)
json j_patch_2 = R"({
  "a":"z",
  "c": {
    "f": null
  }
})"_json;

JSON for Modern C++库旨在提供一种直观的语法来对JSON数据进行处理,就好像该JSON数据是头等(first-class)数据类型一样。例如,你能通过以下语句来对一个对象进行初始化:

json j2 = {
  {"pi", 3.141},
  {"happy", true},
  {"name", "Niels"},
  {"nothing", nullptr},
  {"answer", {
    {"everything", 42}
  }},
  {"list", {1, 0, 2}},
  {"object", {
    {"currency", "USD"},
    {"value", 42.99}
  }}
}

同样地,你可以通过将__json附加至json代码后边来对JSON代码进行解码:

auto j2 = R"(
  {
    "happy": true,
    "pi": 3.141
  }
)"_json;

JSON for Modern C++另外的优点是易于集成,这要归功于它可以被封装于一个单独的头文件json.hpp中,而不需要任何外部库或依赖项。除此之外,它还声称能够通过100%的代码覆盖单元测试,并且不存在内存泄漏。

查看英文原文:JSON for Modern C++ Reaches Version 3.1

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT