菜单

如何生成/解析JSON数据

下载

前言

进行 http 或者是其他需要交互的请求时,常常用 JSON 用于中间数据的传输。由此,Apus IDE 对 json-c 进行了进一步封装,下面将详细讲解,如何生成/解析 JSON。

生成 JSON

简单类型

例如,我希望生成以下的 json 数据

json 复制代码
{
  "code": 200,
  "result":"success"
}

可以通过 StringUtil 中的 mapToJson 方法,对于这种字段中的数字类型进行处理

c++ 复制代码
#include "util/StringUtil.h"

map<string, string> map1;
map1["code"] = StringUtil::vertInt("200");
map1["result"] = "success";
string json = StringUtil::mapToJson(map1);

其中,vertInt可以帮助转换值为数字类型的值。
如果全字段都为字符串类型(推荐使用这种结构),还可以按照下面这种方式进行构造

c++ 复制代码
KV_Str_Str kvvvs;
kvvvs.k = "code";
kvvvs.v = "200";
kvsss.push_back(kvvvs);
kvvvs.k = "result";
kvvvs.v = "success";
kvsss.push_back(kvvvs);
string json = StringUtil::vectorToJsonc(kvsss);

复杂类型

如果我的 json 字符串比较复杂,如下面这种形式

json 复制代码
{
  "code":200,
  "arr":[
          {
            "name":"wh",
            "value": "武汉"
          },
          {
            "name":"xtt",
            "value":"鑫通态"
          }
        ],
  "result":"success"
}

关于coderesult字段不做过多赘述,下面将讲解如何构造 arr 这个数组

c++ 复制代码
#include "util/StringUtil.h"
#include "util/Util.h"

string json;
vector<vector<KV_Str_Str>> kvs;
vector<KV_Str_Str> kvss;
kvss.clear();
KV_Str_Str kv;
kv.k = "name",
kv.v = "wh",
kvss.push_back(kv);
kv.k = "value",
kv.v = "武汉",
kvss.push_back(kv);
kvs.push_back(kvss);
kvss.clear();
kv.k = "name",
kv.v = "xtt",
kvss.push_back(kv);
kv.k = "value",
kv.v = "鑫通态",
kvss.push_back(kv);
kvs.push_back(kvss);
Util::convertArrayToJson(kvs,json);
kvss.clear();
kv.k = "code";
kv.v = "200";
kvss.push_back(kv);
kv.k = "arr";
kv.v = json;
kvss.push_back(kv);
kv.k = "result";
kv.v = "success";
kvss.push_back(kv);
string rJson = StringUtil::vectorToJsonc(kvss);

解析 JSON

简单类型

如果 json 是这种简单类型,如下所示

json 复制代码
{
  "code": "200",
  "result":"success"
}
c++ 复制代码
#include "util/Util.h"


// 获取到了json串为strJson
string code = Util::getValFromJsonc(strJson, "code");
string content = Util::getValFromJsonc(strJson, "result");

复杂类型

json 复制代码
{
  "code":"200",
  "arr":[
          {
            "name":"wh",
            "value": "武汉"
          },
          {
            "name":"xtt",
            "value":"鑫通态"
          }
        ],
  "result":"success"
}
c++ 复制代码
#include "util/Util.h"

string retCode = Util::getValFromJsonc(strJson, "code");
string retContent = Util::getValFromJsonc(strJson, "result");
string retArr = Util::getValFromJsonc(strJson, "arr");
vector<vector<KV_Str_Str>> kvss;
bool b = Util::getArrayFromJsonc(arr, kvss);
if (b){
  // 这里仅取数组中的第一个元素 剩下的元素相同处理,可以通过for循环处理
  vector<KV_Str_Str> kvssss = kvss[0];
  string kvvvs = StringUtil::vectorToJsonc(kvssss);
  string nm = Util::getValFromJsonc(kvvvs, "name");
  string vl = Util::getValFromJsonc(kvvvs, "value");
}
最近修改: 2025-04-01Powered by