如何从 JSON 中删除不需要的字符串属性

2024-01-04

假设我的输入遵循 JSON:

{obj: { x: "", y: "test str" }, myStr: "Hi"}

我想删除所有空字符串和值为N/A使输出变为:

{obj: { y: "test str" }, myStr: "Hi"}

请注意,上面的输入只是一个示例输入文件。

我尝试写一些代码:

var serializerSettings = new JsonSerializerSettings 
{ 
    NullValueHandling = NullValueHandling.Ignore, 
    DefaultValueHandling = DefaultValueHandling.Ignore 
};

但我无法获得所需的输出。


如果您使用类模型进行反序列化,则可以使用自定义ContractResolver过滤掉序列化时不需要的属性:

class CustomContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var prop = base.CreateProperty(member, memberSerialization);
        if (prop.PropertyType == typeof(string) && prop.Readable)
        {
            prop.ShouldSerialize = obj =>
            {
                string val = (string)prop.ValueProvider.GetValue(obj);
                return !string.IsNullOrEmpty(val) && !val.Equals("N/A", StringComparison.OrdinalIgnoreCase);
            };
        }
        return prop;
    }
}

然后像这样使用它:

var obj = JsonConvert.DeserializeObject<YourClass>(inputJson);

var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new CustomContractResolver
    {
        NamingStrategy = new CamelCaseNamingStrategy()
    }
};

string outputJson = JsonConvert.SerializeObject(obj, serializerSettings);

工作演示在这里:https://dotnetfiddle.net/zwpj7I https://dotnetfiddle.net/zwpj7I


或者,您可以在没有类模型的情况下删除不需要的属性,如下所示:

var jo = JObject.Parse(inputJson);

var unwantedProperties = jo.Descendants()
    .OfType<JProperty>()
    .Where(p => p.Value.Type == JTokenType.Null ||
                (p.Value.Type == JTokenType.String &&
                 ((string)p.Value == string.Empty ||
                  string.Equals((string)p.Value, "N/A", StringComparison.OrdinalIgnoreCase))))
    .ToList();

foreach (var prop in unwantedProperties)
{
    prop.Remove();
}

string outputJson = jo.ToString(Formatting.None);

Demo: https://dotnetfiddle.net/QLhDK4 https://dotnetfiddle.net/QLhDK4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 JSON 中删除不需要的字符串属性 的相关文章

  • 如何使用 Retrofit 解析嵌套 json....?

    我不知道该怎么办使用 Retrofit 解析 json 熟悉使用 Retrofit 解析简单的 json 但不熟悉解析嵌套Json using Retrofit 这是我的 Json 数据 current observation image
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i

随机推荐

  • cxf:生成带参数的 jaxb 构造函数

    CXF 中有没有办法生成具有完整构造函数的 JAXB 类 即 以类的成员作为参数 Use the 值构造函数 xjc http java net projects jaxb2 commons pages Value constructor
  • 直接链接到 iOS 7 中的应用商店应用程序

    我有一个免费版本的应用程序 免费应用程序中有完整版本的链接 该链接在 iOS 6 中工作正常 但在 iOS 7 中它显示空白页面 任何帮助表示赞赏 我使用的链接 void getFull self hideAnimated NSString
  • jQuery 中的 class 和 id 有什么区别?

    jQuery 中的 class 和 id 有什么区别 例如 span class lalal span and span span 因为一个可以很好地使用 jQuery 而另一个则不能 谢谢 ID 在页面上应该是唯一的 当您有多个具有相同
  • 选择 Mysql 触发器内变量的值

    好吧 我见过很多类似的问题 但爬过答案并不能让我的触发错误消失 我需要的结果是 每当在数据库表中插入新值时temp pool 如果新地址不等于具有相同地址值的先前地址值 则会触发dev id正如这个NEW dev id将新值插入位置表 这是
  • Asp.net Mvc:为什么浏览器寻找 favicon.ico

    我知道有一个解决方案可以停止 mvc 框架处理 favicon ico 请求 solution https stackoverflow com questions 4624190 mvc does the favicon ico also
  • WPF组合框奇怪的问题

    我将 SortedListbox 绑定到 WPF 组合框 一切都很好 当我选择第一个 仅第一个 项目时 问题发生了 问题是 在选择第一个项目后选择新项目时 SelectedValue 不会更改 假设组合中第一项的 SelectedValue
  • 访问 PCI 配置空间中寄存器的正确方法

    当您需要访问 PCI 配置空间中的寄存器时 是否只需使用内置 BIOS 函数将 DWORD 读 写到配置空间中 例如 如果我尝试使用位于 B0 D31 F1 上的 IDE 控制器 我是否可以使用该 BDF 作为 BIOS 功能的参数来继续读
  • DNN 重定向循环

    我正在尝试通过创建数据库副本并将 net 文件复制到新文件夹中来复制用于测试目的的现有 DNN 门户 在复制站点并更改 Web 配置以指向新站点并更改数据库中的别名后 我收到此错误 此网页有重定向循环 网页位于http xxx us xxx
  • zend框架中的动态自定义ACL?

    我需要一个解决方案 允许经过身份验证的用户访问某些控制器 操作 而不是根据其用户类型 即 管理员或普通用户 尽管我稍后可能会使用标准 ACL 添加此内容 但要根据其用户的当前状态 例如 他们成为该网站的会员已经超过 1 周了吗 他们完整填写
  • 如何在recyclerview中显示加载消息

    我有一个 recyclerview 我想在回收器填充来自 json 的数据时显示 正在加载 消息或旋转圆圈 这是我的回收商的代码 arrayList new ArrayList lt gt adapter new ListAdapterGr
  • Palm Pre 框架

    我有一定的网络开发经验 不是我的主要技能 但我的基础知识相当不错 我非常缺乏的是现代 JS 框架 Prototype jQuery YUI 等 的知识和经验 我想和他们一起玩 最终都会有 但需要从一个开始 问题是这样的 我是very最终有兴
  • C++11 非静态成员初始值设定项和删除的复制构造函数

    我正在尝试使用 GCC 4 7 2 MinGW 编译以下简单代码 这里我使用 C 11 功能 非静态成员初始值设定项 include
  • 有什么办法可以有异步消息框吗?

    或者我必须使用线程 C 不 没有 或者 您可以创建 非模式对话框
  • 使用模型名称和外键模型的区别

    In the Django 文档 https docs djangoproject com en dev ref models fields foreignkey条目为ForeignKey 它说 如果需要在尚未定义的模型上创建关系 可以使用
  • PuTTY plink发送control+C

    我正在使用 Putty plink 命令行实用程序在 UNIX 服务器上运行一些脚本 我使用 m 选项 plink ssh pw xxx myserver m file txt 文件 file txt 包含要执行的命令列表 并且是使用某些应
  • Twitter API 仅应用程序模式身份验证

    我尝试集成 STTwitter 框架 Github 项目 以与 Twitter API 1 1 进行交互 在我的开发帐户中创建应用程序后 我使用 OAuth 凭据进行仅应用程序模式身份验证 无论如何 我收到以下错误 但我不知道如何修复它 错
  • 这是在存储过程中使用 UNION ALL 的正确方法吗?

    这是正确的方法吗UNION ALL在存储过程中 ALTER PROCEDURE GetHomePageObjectPageWise PageIndex INT 1 PageSize INT 10 PageCount INT OUTPUT w
  • 为云函数指定区域时出现异常“firebase.functions() gets ... no argument ...”

    我正在关注 Firebase文档 https firebase google com docs functions locations http and client callable functions为了从网页调用位于不同区域的可调用函
  • 如何在 gradle kotlin-dsl 中覆盖任务

    在 Groovy 中 我重写了这样的任务 task jar overwrite true 如何使用 Kotlin dsl 做到这一点 我知道我可以创建这样的任务 tasks val jar by creating 但我找不到将其声明为覆盖的
  • 如何从 JSON 中删除不需要的字符串属性

    假设我的输入遵循 JSON obj x y test str myStr Hi 我想删除所有空字符串和值为N A使输出变为 obj y test str myStr Hi 请注意 上面的输入只是一个示例输入文件 我尝试写一些代码 var s