如何组数组型json,复杂三层

这篇博客展示了如何使用C#的Newtonsoft.Json库创建一个包含学校、建筑和房间的三层JSON结构。通过`JsonProperty`注解设置属性顺序,并通过实例化对象和添加数据来构建层次结构,最后使用`JsonConvert.SerializeObject`进行序列化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现后的json效果 

 

废话不说直接上代码
//第一层
public class School
{
[JsonProperty(Order = 1)]
public string code { get; set; }
[JsonProperty(Order = 2)]
public string name { get; set; }
[JsonProperty(Order = 3)]
public List<Build> sub;
}
//第二层
public class Build
{
[JsonProperty(Order = 1)]
public string code { get; set; }
[JsonProperty(Order = 2)]
public string name { get; set; }
[JsonProperty(Order = 3)]
public List<Room> sub;
}
//第三层
public class Room
{
[JsonProperty(Order = 1)]
public string code { get; set; }
[JsonProperty(Order = 1)]
public string name { get; set; }
}
填充数据方法
List<School> listSchool= new List<School>();
List<Build> listBuild = new List<Build>();
List<Room> listRoom= new List<Room>();
listSchool.Add(new School()
{
code = dr["xiaoqu_id"].ToString().Trim(),
name = dr["xiaoqu"].ToString().Trim(),
sub = listBuild
}
listBuild.Add(new Build()
{
code = drBuild["loudong_id"].ToString().Trim(),
name = drBuild["loudong"].ToString().Trim(),
sub = listJson
}
listJson.Add(new Room()
{
code = drRoom["room_id"].ToString().Trim(),
name = drRoom["room"].ToString().Trim()
});
序列化方法
strSchool = JsonConvert.SerializeObject(listSchool,settings);
使用C#的Newtonsoft.Json.dll

### MFC 中处理 JSON 三层嵌套格式文本 在 Microsoft 基础类库 (MFC) 应用程序中处理复杂JSON 数据结构,特别是具有三级嵌套的 JSON 文本,可以通过使用第三方库如 `jsoncpp` 或者 Windows 自带的 `CComBSTR` 和 COM 接口实现。下面展示如何利用这些工具来解析并操作三级嵌套的 JSON 数据。 #### 使用 JsonCpp 解析三级嵌套 JSON 数据 安装好 jsoncpp 后,在项目设置里配置相应的头文件路径和链接库选项。以下是具体代码示例: ```cpp #include <json/json.h> #include <fstream> void ParseNestedJson(const std::string& jsonString) { Json::Value root; Json::CharReaderBuilder reader; std::istringstream s(jsonString); std::string errs; // 将字符串转换成 Json::Value 对象 if (!parseFromStream(reader, s, &root, &errs)) { AfxMessageBox(_T("Failed to parse JSON string")); return; } // 访问顶层对象中的 "items" const Json::Value items = root["items"]; for (unsigned int i = 0; i < items.size(); ++i) { // 获取第二层的对象 "details" const Json::Value details = items[i]["details"]; // 继续深入第三层获取 "category" const std::string category = details.get("category", "Unknown").asString(); CString message; message.Format(_T("Category: %s"), CA2CT(category.c_str())); AfxMessageBox(message); } } ``` 这段 C++ 代码展示了如何读取包含三个层次键值对关系的 JSON 字符串,并逐级遍历其内部节点直至最底层字段[^1]。通过这种方式可以方便地访问任意深度嵌套的数据项而无需担心越界错误等问题。 对于更复杂的情况,比如当遇到数组的属性时,则可以根据实际情况调整循环逻辑以适应不同的数据模需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溜溜达达看风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值