jsoncpp 最新版本为 master 分支,必须用新版本的支持 C++ 11 的编译器,C++ Builder 需要选择 clang 编译器,不可以使用 Borland 编译器。
下载和编译 jsoncpp 可以参考《C++ Builder 编译 jsoncpp 库 (master 分支)》
使用 jsoncpp 库和解析 json 请参考 《C++ Builder 解析 json,Json::CharReaderBuilder 的使用方法》
- 使用 jsoncpp 静态库
- 生成 json 对象
- 生成 json 字符串
控制 json 缩进 / 压缩格式的 json
直接输出 UTF-8 字符 / 转义输出 UTF-8 字符
浮点数的输出类型和精度
浮点数 NAN, +INF, -INF 的输出方式
是否输出 NULL 值
是否输出注释
控制冒号前后的空格,YAML 兼容格式 - 保存 json文件
- 下载本文例子
一. 使用 jsoncpp 静态库
使用 jsoncpp 库和解析 json 请参考 《C++ Builder 解析 json,Json::CharReaderBuilder 的使用方法》
二. 生成 json 对象
例:要生成这样的 json:
{
"data" : 12345,
"error" : [
{
"描述" : "故障1",
"编码" : "101"
},
{
"描述" : "故障2",
"编码" : "102"
}
]
}
代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data"] = 12345;
J["error"][0][UTF8String(L"编码").c_str()] = UTF8String(L"101" ).c_str();
J["error"][0][UTF8String(L"描述").c_str()] = UTF8String(L"故障1").c_str();
J["error"][1][UTF8String(L"编码").c_str()] = UTF8String(L"102" ).c_str();
J["error"][1][UTF8String(L"描述").c_str()] = UTF8String(L"故障2").c_str();
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true;
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
前面的代码是通过 json 根节点直接创建 json 字符串,下面代码是通过中间变量创建:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
typedef struct
{
const wchar_t *sCode;
const wchar_t *sDesc;
} TErrorInfo;
static const TErrorInfo EInfo[] =
{
{ L"101", L"故障1" },
{ L"102", L"故障2" },
{ NULL , NULL },
};
Json::Value J; // 要生成的 json 对象
J["data"] = 12345;
Json::Value &jsError = J["error"]; // 注意要引用 json 对象
for(int i=0; EInfo[i].sCode; i++)
{
const TErrorInfo &EI = EInfo[i];
Json::Value &jsErrInfo = jsError[i]; // 注意要引用 json 对象
jsErrInfo[UTF8String(L"编码").c_str()] = UTF8String(EI.sCode).c_str();
jsErrInfo[UTF8String(L"描述").c_str()] = UTF8String(EI.sDesc).c_str();
}
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true;
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
三. 生成 json 字符串
Json::StreamWriterBuilder 有很多参数,如前面例子当中的
jswBuilder["emitUTF8"] = true;
就是直接输出 UTF-8 字符,这个参数的默认值是 false,UTF-8 字符会进行转义之后再输出。
以下表格是 Json::StreamWriterBuilder 的参数说明:
参数 | 说明 |
---|---|
"indentation" | 缩进字符串。默认为制表符 "\t" ;如果为空字符串 "" 输出没有缩进和换行。 |
"emitUTF8" | false :转义输出 UTF-8 字符 (默认),true :直接输出 UTF-8 字符。 |
"precisionType" | "significant" :用科学计数法表示浮点数 (默认);"decimal" :用小数表示浮点数。 |
"precision" | 整数值,表示浮点数的精度。 科学计数法:有效数字位数 (默认 17 ),小数:小数点后保留位数。 |
"useSpecialFloats" | 浮点数 NAN、+INF、-INF 的输出。false :输出 "null", "-1e+9999", "1e+9999" (默认)true :输出 "NaN", "-Infinity", "Infinity" |
"dropNullPlaceholders" | 是否输出 NULL 值。false :NULL 输出 "null" (默认);true :不输出 NULL 值。 |
"commentStyle" | "All" :保留所有的注释 (默认);"None" :删除所有的注释 |
"enableYAMLCompatibility" | 按照 YAML 兼容的格式输出冒号。false :根据 "indentation" 参数 (默认);true :冒号前面没有空格,后面有1个空格。 |
1. 控制 json 缩进 / 压缩格式的 json
Json::StreamWriterBuilder 的 "indentation" 参数控制输出的缩进及换行的格式,如果 "indentation" 为空字符串,生成的 json 没有换行和不必要的空格,如下面的例子:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data"] = 12345;
J["error"][0][UTF8String(L"编码").c_str()] = UTF8String(L"101" ).c_str();
J["error"][0][UTF8String(L"描述").c_str()] = UTF8String(L"故障1").c_str();
J["error"][1][UTF8String(L"编码").c_str()] = UTF8String(L"102" ).c_str();
J["error"][1][UTF8String(L"描述").c_str()] = UTF8String(L"故障2").c_str();
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true; // 直接输出 UTF-8 字符
jswBuilder["indentation"] = ""; // 压缩格式,没有换行和不必要的空白字符
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
Json::StreamWriterBuilder 的 "indentation" 参数默认是一个制表符 "\t"
,如果改成两个空格,效果如下:
jswBuilder["indentation"] = " "; // 缩进为 2 个空格
2. 直接输出 UTF-8 字符 / 转义输出 UTF-8 字符
Json::StreamWriterBuilder 的 "emitUTF8" 参数控制是否直接输出 UTF-8 字符,默认为 false 转义输出。
转义输出 UTF-8 字符的效果:英文字符和数字直接输出,汉字都变成了 "\u7384\u5774"
这样的格式了。
3. 浮点数的输出类型和精度
浮点数输出类型 "precisionType" 有两种选择,科学计数法和小数。
例子:"precisionType" 为 "significant" 科学计数法,"precision" 精度为 6 位有效数字的运行效果。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data03"] = 123456.789;
J["data04"] = 12345.6789;
J["data05"] = 1234.56789;
J["data06"] = 123.456789;
J["data07"] = 12.3456789;
J["data08"] = 1.23456789;
J["data09"] = 0.123456789;
J["data10"] = 0.0123456789;
J["data11"] = 0.00123456789;
J["data12"] = 0.000123456789;
J["data13"] = 0.0000123456789;
J["data14"] = 0.00000123456789;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType"] = "significant"; // 用科学计数法表示浮点数
jswBuilder["precision" ] = 6; // 6 位有效数字
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
例子:"precisionType" 为 "decimal" 小数,"precision" 为小数点后面保留 3 位的运行效果。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data03"] = 123456.789;
J["data04"] = 12345.6789;
J["data05"] = 1234.56789;
J["data06"] = 123.456789;
J["data07"] = 12.3456789;
J["data08"] = 1.23456789;
J["data09"] = 0.123456789;
J["data10"] = 0.0123456789;
J["data11"] = 0.00123456789;
J["data12"] = 0.000123456789;
J["data13"] = 0.0000123456789;
J["data14"] = 0.00000123456789;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType"] = "decimal"; // 用小数表示浮点数
jswBuilder["precision" ] = 3; // 小数点后面保留 3 位
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
4. 浮点数 NAN, +INF, -INF 的输出方式
"useSpecialFloats" 是否输出浮点数的 NAN, +INF, -INF 值。
如果要使用 C++ Builder 的 Math::NaN、Math::Infinity、Math::NegInfinity 等数值,需要包含头文件:
#include
例子:"useSpecialFloats" 为 true,浮点数 NAN, +INF, -INF 值输出 "NaN", "Infinity", "-Infinity"
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data03"] = 123456.789;
J["data04"] = 12345.6789;
J["data05"] = 1234.56789;
J["data06"] = 123.456789;
J["data07"] = 12.3456789;
J["data08"] = 1.23456789;
J["data09"] = 0.123456789;
J["data10"] = 0.0123456789;
J["data11"] = 0.00123456789;
J["data12"] = 0.000123456789;
J["data13"] = 0.0000123456789;
J["data14"] = 0.00000123456789;
J["data15"] = (double)Math::NaN;
J["data16"] = (double)Math::Infinity;
J["data17"] = (double)Math::NegInfinity;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType" ] = "significant"; // 用科学计数法表示浮点数
jswBuilder["precision" ] = 6; // 6 位有效数字
jswBuilder["useSpecialFloats"] = true; // 输出 "NaN", "-Infinity", "Infinity"
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
例子:"useSpecialFloats" 参数为 false,浮点数的 NAN, +INF, -INF 值分别输出为 "null", "1e+9999", "-1e+9999"。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data03"] = 123456.789;
J["data04"] = 12345.6789;
J["data05"] = 1234.56789;
J["data06"] = 123.456789;
J["data07"] = 12.3456789;
J["data08"] = 1.23456789;
J["data09"] = 0.123456789;
J["data10"] = 0.0123456789;
J["data11"] = 0.00123456789;
J["data12"] = 0.000123456789;
J["data13"] = 0.0000123456789;
J["data14"] = 0.00000123456789;
J["data15"] = (double)Math::NaN;
J["data16"] = (double)Math::Infinity;
J["data17"] = (double)Math::NegInfinity;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType" ] = "significant"; // 用科学计数法表示浮点数
jswBuilder["precision" ] = 6; // 6 位有效数字
jswBuilder["useSpecialFloats"] = false; // NAN, +INF, -INF 值分别输出为 "null", "1e+9999", "-1e+9999"
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
5. 是否输出 NULL 值
默认情况,是输出 NULL 值的。参数 "dropNullPlaceholders" 如果为 true,不输出 NULL 值。
例子:产生 2 个 NULL 值的输出,正常输出 NULL 值。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data15"] = (double)Math::NaN;
J["data16"] = (double)Math::Infinity;
J["data17"] = (double)Math::NegInfinity;
J["data18"] = Json::nullValue;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType" ] = "significant"; // 用科学计数法表示浮点数
jswBuilder["precision" ] = 6; // 6 位有效数字
jswBuilder["useSpecialFloats"] = false; // NAN, +INF, -INF 值分别输出为 "null", "1e+9999", "-1e+9999"
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
例子:设置参数 "dropNullPlaceholders" 为 true,不输出 NULL 值。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Json::Value J; // 要生成的 json 对象
J["data01"] = 12345678.9;
J["data02"] = 1234567.89;
J["data15"] = (double)Math::NaN;
J["data16"] = (double)Math::Infinity;
J["data17"] = (double)Math::NegInfinity;
J["data18"] = Json::nullValue;
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["indentation" ] = " "; // 缩进为 2 个空格
jswBuilder["emitUTF8" ] = true; // 直接输出 UTF-8 字符
jswBuilder["precisionType" ] = "significant"; // 用科学计数法表示浮点数
jswBuilder["precision" ] = 6; // 6 位有效数字
jswBuilder["useSpecialFloats"] = false; // NAN, +INF, -INF 值分别输出为 "null", "1e+9999", "-1e+9999"
jswBuilder["dropNullPlaceholders"] = true; // 不输出 NULL 值
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
Memo1->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo1->Lines->Text = txt;
Memo1->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
运行结果:
运行结果里面看到 data15 输出了 NULL 值,data18 没输出 NULL 值,分析原因:
- data18 是真正的 NULL 值,没有输出;
- data15 不是真正的 NULL 值,而是 NAN 值,程序设置了 NAN 值输出 NULL,就输出了 NULL 值。
6. 是否输出注释
参数 "commentStyle" 如果为 "None" 不输出注释。
默认 "commentStyle" 为 "All" 保留所有的注释。
例子:从 Memo1 里面读取 json 解析之后,输出到 Memo2 里面,正常输出:
void __fastcall TForm1::Button4Click(TObject *Sender)
{
try
{
UTF8String txt = Memo1->Text;
Json::Value jsValue;
Json::String jsErrors;
Json::CharReaderBuilder jcrBuilder;
std::unique_ptrjcReader(jcrBuilder.newCharReader());
if(!jcReader->parse(txt.c_str(), txt.c_str()+txt.Length(), &jsValue, &jsErrors))
{
Memo2->Lines->Add(L"JSON 解析错误");
return;
}
// Memo1 里面的 json 已经解析到 jsValue 里面了
// 把 jsValue 的内容显示在 Memo2 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true; // 直接输出 UTF-8 字符
jswBuilder["indentation"] = " "; // 缩进 2 个空格
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(jsValue, &os);
txt = os.str().c_str();
Memo2->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo2->Lines->Text = txt;
Memo2->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
catch(std::exception &e)
{
UTF8String sErrStr = e.what();
Memo2->Lines->Add(L"错误:" + sErrStr);
}
catch(Exception &e)
{
UTF8String sErrStr = e.Message;
Memo2->Lines->Add(L"错误:" + sErrStr);
}
}
运行结果:
例子:参数 "commentStyle" 设为 "None",从 Memo1 里面读取 json 解析之后,输出到 Memo2 里面,不输出注释。
void __fastcall TForm1::Button4Click(TObject *Sender)
{
try
{
UTF8String txt = Memo1->Text;
Json::Value jsValue;
Json::String jsErrors;
Json::CharReaderBuilder jcrBuilder;
std::unique_ptrjcReader(jcrBuilder.newCharReader());
if(!jcReader->parse(txt.c_str(), txt.c_str()+txt.Length(), &jsValue, &jsErrors))
{
Memo2->Lines->Add(L"JSON 解析错误");
return;
}
// Memo1 里面的 json 已经解析到 jsValue 里面了
// 把 jsValue 的内容显示在 Memo2 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true; // 直接输出 UTF-8 字符
jswBuilder["indentation"] = " "; // 缩进 2 个空格
jswBuilder["commentStyle"] = "None"; // 删除所有的注释
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(jsValue, &os);
txt = os.str().c_str();
Memo2->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo2->Lines->Text = txt;
Memo2->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
catch(std::exception &e)
{
UTF8String sErrStr = e.what();
Memo2->Lines->Add(L"错误:" + sErrStr);
}
catch(Exception &e)
{
UTF8String sErrStr = e.Message;
Memo2->Lines->Add(L"错误:" + sErrStr);
}
}
运行结果:
7. 控制冒号前后的空格,YAML 兼容格式
如果 "enableYAMLCompatibility" 为 true,使用 YAML 兼容格式输出,也就是冒号前面没有空格,冒号后面有 1 个空格。
例子:解析 Memo1 里面的 json,去掉注释,使用 YAML 兼容格式输出到 Memo2 里面。
void __fastcall TForm1::Button4Click(TObject *Sender)
{
try
{
UTF8String txt = Memo1->Text;
Json::Value jsValue;
Json::String jsErrors;
Json::CharReaderBuilder jcrBuilder;
std::unique_ptrjcReader(jcrBuilder.newCharReader());
if(!jcReader->parse(txt.c_str(), txt.c_str()+txt.Length(), &jsValue, &jsErrors))
{
Memo2->Lines->Add(L"JSON 解析错误");
return;
}
// Memo1 里面的 json 已经解析到 jsValue 里面了
// 把 jsValue 的内容显示在 Memo2 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true; // 直接输出 UTF-8 字符
jswBuilder["indentation"] = " "; // 缩进 2 个空格
jswBuilder["commentStyle"] = "None"; // 删除所有的注释
jswBuilder["enableYAMLCompatibility"] = true; // YAML 兼容格式:冒号前面没有空格,后面有1个空格
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(jsValue, &os);
txt = os.str().c_str();
Memo2->Lines->LineBreak = L"\n"; // jsoncpp 的换行符是 "\n"
Memo2->Lines->Text = txt;
Memo2->Lines->LineBreak = L"\r\n"; // 恢复 Windows 的换行符 "\r\n"
}
catch(std::exception &e)
{
UTF8String sErrStr = e.what();
Memo2->Lines->Add(L"错误:" + sErrStr);
}
catch(Exception &e)
{
UTF8String sErrStr = e.Message;
Memo2->Lines->Add(L"错误:" + sErrStr);
}
}
运行结果:
四. 保存 json文件
生成 json,保存在 L"d:\\test.txt"
里面。
使用 TStringList 存盘,采用 UTF-8 编码
void __fastcall TForm1::Button5Click(TObject *Sender)
{
try
{
Json::Value J; // 要生成的 json 对象
J["data"] = 12345;
J["error"][0][UTF8String(L"编码").c_str()] = UTF8String(L"101" ).c_str();
J["error"][0][UTF8String(L"描述").c_str()] = UTF8String(L"故障1").c_str();
J["error"][1][UTF8String(L"编码").c_str()] = UTF8String(L"102" ).c_str();
J["error"][1][UTF8String(L"描述").c_str()] = UTF8String(L"故障2").c_str();
// 把 J 的内容显示在 Memo1 里面
Json::StreamWriterBuilder jswBuilder;
jswBuilder["emitUTF8"] = true;
std::unique_ptrjsWriter(jswBuilder.newStreamWriter());
std::ostringstream os;
jsWriter->write(J, &os);
UTF8String txt = os.str().c_str();
std::unique_ptrsl(new TStringList);
sl->Text = txt;
sl->SaveToFile(L"d:\\test.txt", TEncoding::UTF8);
}
catch(std::exception &e)
{
UTF8String sErrStr = e.what();
Memo2->Lines->Add(L"错误:" + sErrStr);
}
catch(Exception &e)
{
UTF8String sErrStr = e.Message;
Memo2->Lines->Add(L"错误:" + sErrStr);
}
}
用记事本打开 "d:\\test.txt"
查看内容:
五. 下载本文例子
请点击:jsoncpp-master-1.9.3-src-cbuilder 下载 jsoncpp-master 1.9.3 源码、C++ Builder 项目文件,编译好了的库文件、例子程序等。
参考:
- C++ Builder 编译 jsoncpp 库 (0.y.z 分支)
- C++ Builder 编译 jsoncpp 库 (master 分支)
- C++ Builder 解析和生成 json (使用 jsoncpp (0.y.z))
- C++ Builder 解析 json,Json::CharReaderBuilder 的使用方法
- C++ Builder 生成 json,Json::StreamWriterBuilder 参数详解
- C++ Builder 遍历 json (使用 jsoncpp)