如何从JSON字符串中删除特定的JSON属性

问题描述 投票:1回答:3

我正在为web api设置审核日志。在这里,我想从json字符串中删除密码属性,因为安全原因。我不想记录登录API的登录密码。

Json /请求有效负载:

{"code":"medics1","username":"admin","password":"password"}

我尝试使用以下代码:

var payload = JArray.Parse(objQueue.payload);
payload.Remove("password");
c# json asp.net-web-api
3个回答
1
投票

你已经接近目标了。您只需要对代码进行一点改动即可。

你正在使用JArray,这用于解析jaz开始和结束与[...]不是为{...}

而你的json是一个JObject,意味着它的开始和结束与{...}

所以只需使用JObject而不是JArray然后它就可以了

string json = @"{ 'code':'medics1','username':'admin','password':'password'}";

JObject jObject = JObject.Parse(json);

jObject.Remove("password");

string outputJson = jObject.ToString();

输出:(来自调试器)

enter image description here


1
投票

你应该在这里使用jobject解析。来自newtonsoft网站的代码应该会有所帮助

string json = @"{
    'channel': {
     'title': 'Star Wars',
     'link': 'http://www.starwars.com',
     'description': 'Star Wars blog.',
     'obsolete': 'Obsolete value',
     'item': []
    }
 }";

JObject rss = JObject.Parse(json);
JObject channel = (JObject)rss["channel"];
channel.Property("obsolete").Remove();

您没有命名对象,因此您可以直接调用

rss.Property(“password”).Remove();

另一种替代方法是反序列化为忽略密码属性然后再次序列化的类。

希望这可以帮助。


1
投票

你几乎是正确的,只需要根据你的JSON字符串反序列化为一个对象而不是一个数组。

string str = @"{'code':'medics1','username':'admin','password':'password'}";
JObject j = JsonConvert.DeserializeObject<JObject>(str);
j.Remove("password");
Console.WriteLine(j.ToString(Formatting.Indented));

输出:

{
  "code": "medics1",
  "username": "admin"
}
© www.soinside.com 2019 - 2024. All rights reserved.