【问题标题】:Replace a JSON value of a property in several JObjects替换多个 JObject 中某个属性的 JSON 值
【发布时间】:2017-08-31 07:25:36
【问题描述】:

我有一个 JSON 文件,我正在从文本中读取并使用 Newtonsoft.Json.Linq 将其解析为 JObject。 JSON 文件如下所示:

{  
   "EntityTypeDto":[  
      {  
         "EntityType":"Grade",
         "Language":"ES"
      },
      {  
         "EntityType":"ApplicationType",
         "Language":"ES"
      },
      {  
         "EntityType":"Borough",
         "Language":"ES"
      }

   ]
}

使用 Newtonsoft 库,有什么方法可以利用 JObject 将所有对象的 Language 属性替换为另一个值?如果不是,那么另一种方法是什么?这个项目是 C# 中的控制台应用程序,VS 2012,谢谢。

【问题讨论】:

    标签: c# json linq visual-studio-2012 json.net


    【解决方案1】:

    这里不需要Linq来实现你需要的,Linq是用来查询数据的,不是用来修改的。因此,您可以只使用 foreach 来迭代和修改数组的元素:

    JObject json= JObject.Parse(jsonString);
    JArray entityTypeDtos= (JArray)json["EntityTypeDto"];
    foreach(var e in entityTypeDtos)
    {
      if(e["Language"] != null)
         e["Language"]="EN";
    }
    

    【讨论】:

    • 进行这些更改后,如何使用新值将其返回给 JObject(您为其命名为“json”)?
    • 在执行foreach后调试并检查json变量,你会看到元素将更改为EN
    • Json 像 Xml 一样是分层和结构化的,只是不那么冗长,这就是为什么可以枚举和替换,因为它应该是格式良好的
    • @octavioccl,您可能需要检查e["Language"] != null,以确保在进行更改之前。由于即使在少数元素中没有语言元素,它也将是完美的 Json
    • 嗯,这是真的,但我总是把这种验证留给 OP,只关注主要问题,无论如何感谢您的建议 ;)
    【解决方案2】:

    我猜测Linq 标签你想要Linq 方法试试这个

    string json = @"{  
       'EntityTypeDto':[  
          {  
             'EntityType':'Grade',
             'Language':'ES'
          },
          {  
             'EntityType':'ApplicationType',
             'Language':'ES'
          },
          {  
             'EntityType':'Borough',
             'Language':'ES'
          }
       ]
    }";
    
    
    JObject myjobj = JObject.Parse(json);
    
    JArray EntityType = (JArray)myjobj["EntityTypeDto"];
    
    (from eobj in EntityType 
    where eobj["Language"]="ES"
    select eobj).ForEach(x => x["Language"]="New Value");
    

    【讨论】:

    • 谢谢,Language 值更新后如何转换回 JObject?
    • @user3299379 ForeachList<T> 的一个方法,也需要强制转换:(string)eobj["Language"]="ES"
    猜你喜欢
    • 2021-05-13
    • 2023-03-17
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2015-11-20
    • 2021-07-14
    相关资源
    最近更新 更多