C++ – 格式化json字符串,方便展示json字符串的层次结构
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – 格式化json字符串,方便展示json字符串的层次结构
原文链接:https://www.stubbornhuang.com/1859/
发布于:2021年12月10日 16:03:21
修改于:2021年12月10日 16:03:21
1 格式化json字符串
1.1 目的
在C++ nlohmann json得到的字符串都是一整块的输出结果,对于json字符串的层次结构展示的不是很清晰,希望在打印json字符串的时候可以在控制台中看到层次结构分明的json字符串。
例如将:
{"Peoples":[{"name":"张三","age":18,"sex":"man"},{"name":"张美","age":18,"sex":"woman"}]}
转化为:
{
"Peoples": [
{
"name": "张三",
"age": 18,
"sex": "man"
},
{
"name": "张美",
"age": 18,
"sex": "woman"
}
]
}
1.2 json字符串格式化代码
#include <iostream>
#include <sstream>
#include <iomanip>
std::string getLevelStr(int level)
{
std::string levelStr = "";
for (int i = 0; i < level; i++)
{
levelStr += " ";
}
return levelStr;
}
std::string FormatJsonToDisplay(std::string json)
{
std::string result = "";
int level = 0;
for (std::string::size_type index = 0; index < json.size(); index++)
{
char c = json[index];
if (level > 0 && '\n' == json[json.size() - 1])
{
result += getLevelStr(level);
}
switch (c)
{
case '{':
case '[':
result = result + c + "\n";
level++;
result += getLevelStr(level);
break;
case ',':
result = result + c + "\n";
result += getLevelStr(level);
break;
case '}':
case ']':
result += "\n";
level--;
result += getLevelStr(level);
result += c;
break;
default:
result += c;
break;
}
}
return result;
}
int main()
{
std::string inputStr = R"({"Peoples":[{"name":"张三","age":18,"sex":"man"},{"name":"张美","age":18,"sex":"woman"}]})";
std::cout << "Json格式化前:" << std::endl;
std::cout << inputStr << std::endl;
std::string inputStr_format = FormatJsonToDisplay(inputStr);
std::cout << "Json格式化后:" << std::endl;
std::cout << inputStr_format << std::endl;
return 0;
}
运行结果:
当前分类随机文章推荐
- Centos7 编译C++项目错误解决 : terminate called after throwing an instance of 'std::regex_error' 阅读2562次,点赞1次
- C++ - Windows/Linux跨平台获取本机CPU核心数 阅读216次,点赞0次
- C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 阅读3499次,点赞0次
- C++ - 判断两个字符串是否相等方法总结 阅读396次,点赞0次
- 计算几何 - C++计算两个二维向量的夹角 阅读4287次,点赞3次
- C++11 - std::function简要介绍以及可包装函数的几种形式总结 阅读3185次,点赞0次
- C++ - 判断本机文件是否存在的方式总结 阅读4966次,点赞0次
- C++ - return this和return *this的含义和区别 阅读381次,点赞0次
- C++ - Windows下字符串UTF8编码转ANSI,ANSI转UTF8编码 阅读472次,点赞0次
- C++ - Windows/Linux生成uuid(通用唯一识别码) 阅读1867次,点赞2次
全站随机文章推荐
- 资源分享 - GLSL Essentials - Enrich your 3D scenes with the power of GLSL 英文高清PDF下载 阅读2268次,点赞0次
- 资源分享 - OpenGL编程指南(原书第8版)- OpenGL红宝书高清带书签PDF下载 阅读4827次,点赞1次
- ThreeJS - 如何提升three.js的渲染效果?看完这篇你可能会有启发 阅读3586次,点赞0次
- UnrealEngine4 - 关于UObject被自动GC垃圾回收的巨坑 阅读4087次,点赞0次
- Pytorch - 检测CUDA、cuDNN以及GPU版本的Pytorch是否安装成功、GPU显存测试 阅读3443次,点赞1次
- Phpstudy+VSCode搭建php开发调试环境保姆级教程 阅读80次,点赞0次
- 中国男篮 - 2023年男篮世界杯亚洲区预选赛中国男篮比赛录像 阅读710次,点赞0次
- Duilib - 超链接文本 阅读3653次,点赞0次
- 深度学习 - 深度学习中的术语/专有名词归纳 阅读630次,点赞0次
- 资源分享 - GDI+教程(C++中文版 GDI+SDK中文参考手册)PDF下载 阅读2838次,点赞0次
评论
169