.NET6东西--可写的JSON DOM API

简介: .NET6东西--可写的JSON DOM API

在项目开发中,我们有时会对数据进行JSON序列化和反序列化,.NET6以前我们经常这么使用:

Car car = new Car { Name = "卡车",Size="10米*6米" };
var carJson = JsonSerializer.Serialize(car);
var carNew = JsonSerializer.Deserialize<Car>(carJson);

上面的代码中如果我们要操作Json dom就必须将它转换为对应的类实例,对于结构不复杂的json来说这没什么,但是对于结构复杂或者层级很深的json字符串来说,代码量可想而知。因此在.NET6中微软为我们提供了可写的JSON DOM API,它位于System.Text.Json命名空间下,它可以让我们跳过创建类去直接操作JSON DOM。下面我们通过增删改查四个操作来看看它的使用吧。


新增操作

对于新增操作我们可以使用JsonObject类和JsonArray类去创建JSON DOM:


  • JsonObject:表示创建JSON对象;
  • JsonArray:表示创建JSON数组。


使用方法如下:

 var jo = new JsonObject { 
    ["Message"] = "个人信息", 
    ["Father"] = new JsonObject { ["Name"] = "张三" },
    ["Son"] = new JsonArray(
        new JsonObject { 
            ["Name"] = "张小小",
            ["Pet"] = new JsonArray("小花狗", "小花猫"),
            ["Age"]=""
        },
        new JsonObject {
             ["Name"] = "张大大",
             ["Pet"] = new JsonArray("小狼狗", "小公鸡"),
             ["Age"]=2
        })
};
var js= jo.ToJsonString(new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(jsonString);

代码运行之后结果为:

{
  "Message": "个人信息",
  "Father": {
    "Name": "张三"
  },
  "Son": [
    {
      "Name": "张小小",
      "Pet": ["小花狗", "小花猫"],
      "Age":""
    },
     {
      "Name": "张大大",
      "Pet": ["小狼狗", "小公鸡"],
      "Age":2
    }
  ]
}

代码中可以看出JsonObject类和JsonArray类可以嵌套使用生成JSON DOM节点树,每个DOM节点上的属性都用键值对表示,并且同一数组中的不同节点的属性也可以是不一样(上例中的Age节点)。


查询操作

查询操作可以使用JsonNode类解析JSON DOM:


  • JsonNode:解析Json字符串并从节点获取值。


使用代码如下:

var njo= JsonNode.Parse(js);
//运行后输出 “张大大”
Console.WriteLine(njo["Son"][1]["Name"]);

从代码中可以看出,我们能通过属性名和索引访问任意的JSON DOM节点。我们也可以先转换成JsonObject对象和JsonArray对象,并使用GetValue方法获取强类型的值,案例代码如下:

if (njo["Son"] is JsonArray ja)
{
  //运行后输出“张小小   张大大”
    for (int i = 0; i < ja.Count; i++)
    {
        if (ja[i]["Name"] is JsonObject jo)
        {
            string name = jo.GetValue<string>();
            Console.WriteLine(name);
        }
    }
}

修改操作

我们还可以修改现有节点的值,例如将Message节点的值改为“张三的个人信息”:

njo["Message"] = "张三的个人信息";
``
当然,我们不仅能改还可以给节点增加属性和新的节点:
```csharp
//增加新属性
njo["Message"]["Address"] = "XX省XX市XX区XX路XX小区XX号楼XX单元XX";
//增加新节点
njo["SearchDate"] = new JsonObject { ["UTC"] = "2021/12/1 00:00:00",["UTC8"]="2021/12/ 08:00:00" };

删除操作

对于删除,.NET6并没有提供删除节点的方法,但我们可以使用一个变通的方法来实现,就是通过将节点设为null,序列化时忽略,代码如下:

njo["Message"]["Address"] = null;
njo["SearchDate"] = null;
js = jo.ToJsonString(new JsonSerializerOptions { 
    WriteIndented = true, 
     //忽略null的节点不序列化
    DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull 
    });
目录
相关文章
|
21天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
14天前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
32 12
|
2月前
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
3月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
3月前
|
JSON API 数据格式
Amazon商品详情API,json数据格式示例参考
亚马逊商品详情API接口返回的JSON数据格式通常包含丰富的商品信息,以下是一个简化的JSON数据格式示例参考
|
3月前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
4月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索json数据格式示例(API接口)
拍立淘按图搜索API接口为电商平台和购物应用提供了强大的图像搜索功能,能够显著提升用户的购物体验和搜索效率。开发者可以根据自己的需求调用此接口,并处理返回的JSON格式数据来展示推荐商品
|
4月前
|
JSON API 数据格式
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
71 0
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
|
4月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
6月前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者