【问题标题】:How to delete a property in a JArray?如何删除 JArray 中的属性?
【发布时间】:2022-11-03 09:23:25
【问题描述】:

我有一个如下的JArray,文件属性包含一个base64字符串,所以它很大,如何删除它?

{ 
  "files": [
    {
      "filename": "892a3a3bb7814d67995d4059b278c581.png",
      "real_filename": "Logo - Trimmed.png",
      "filesize": 42198,
      "filetype": "image/png",
      "file": "xxxx"
    },
    {
      "filename": "22a3a3bb7814d67995d4059b278c581.png",
      "real_filename": "Logo - Trimmed2.png",
      "filesize": 42198,
      "filetype": "image/png",
      "file": "xxxx"
    }
  ] 
}

我在下面尝试过,但它给了我一个例外:

无法从 Newtonsoft.Json.Linq.JProperty 添加或删除项目。

for (int _i = 0; _i < _ja_files.Count; _i++) 
{
     _ja_files[_i]["file"].Remove();
}

【问题讨论】:

  • 我认为这个question 可以回答你的问题

标签: c# json json.net


【解决方案1】:

解决方案 1

JArrayJObject.Remove() 中迭代 JObject 以删除该属性。

var jObj = JObject.Parse(jsonStr);
        
foreach (JObject obj in jObj["files"] as JArray)
{
    obj.Remove("file");
}

Demo Solution 1 @ .NET Fiddle


解决方案 2

另一种方法使用name: "file" 过滤JProperty 并将其删除。

using System.Collections.Generic;

(jObj["files"] as JArray).Descendants()
    .OfType<JProperty>()
    .Where(x => x.Name == "file")       
    .ToList()
    .ForEach(x => x.Remove());

Demo Solution 2 @ .NET Fiddle

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 2016-08-05
    • 2017-05-18
    • 2013-05-19
    • 1970-01-01
    • 2021-07-27
    • 2015-05-02
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多