本文作者: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;
}
运行结果:

当前分类随机文章推荐
- C++ - int转string方法总结 阅读3521次,点赞0次
- C++11/std::condition_variable - 生产者消费者模型 阅读1966次,点赞0次
- C++11/std::shared_ptr - 循环引用问题 阅读2653次,点赞0次
- C++ - Windows/Linux生成uuid(通用唯一识别码) 阅读99次,点赞0次
- C++11/std::thread - 线程管理join/detach 阅读1534次,点赞0次
- C++STL容器 – std::vector容器修改、元素操作总结 push_back,emplace_back,emplace,insert,erase,pop_back,clear,resize,swap 阅读211次,点赞1次
- CMake - 设置Debug或者Release编译模式 阅读69次,点赞0次
- C++11 - 委托机制的实现TinyDelegate 阅读643次,点赞0次
- C++11 - 使用std::thread::join()/std::thread::detach()方法需要注意的点 阅读1386次,点赞0次
- C++ – 字节数组byte[]或者unsigned char[]与float的相互转换 阅读174次,点赞0次
全站随机文章推荐
- Mediapipe - 全身包含身体、手部、面部所有关键点标注位置对应图 阅读1238次,点赞1次
- 资源分享 - Unity Shader入门精要 PDF下载 阅读316次,点赞0次
- Pac - 自定义Pac的编写和语法规则 阅读3004次,点赞0次
- 资源分享 - Advances in GPU Research and Practice 英文高清PDF下载 阅读478次,点赞0次
- 资源分享 - Game AI Pro 360 - Guide to Tactics and Strategy 英文高清PDF下载 阅读910次,点赞0次
- FFmpeg - 通过h264编码的视频文件开始很清晰后面逐渐模糊 阅读2334次,点赞1次
- 资源分享 - Real-Time Rendering, Second Edition 英文高清PDF下载 阅读1019次,点赞0次
- 资源分享 - Game Programming Gems 4 英文高清PDF下载 阅读1345次,点赞1次
- 资源分享 - Quaternions for Computer Graphics 英文高清PDF下载 阅读864次,点赞0次
- 资源分享 - Game Programming Patterns 英文高清PDF下载 阅读636次,点赞0次
评论
144