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

时间:2019-04-19 05:49:05

标签: c# json asp.net-web-api

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

Json /请求有效载荷:

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

我尝试了以下代码:

var payload = JArray.Parse(objQueue.payload);
payload.Remove("password");

3 个答案:

答案 0 :(得分:1)

您应在此处使用jobject解析。牛顿软件网站的以下代码应该会有所帮助

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 :(得分: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"
}

答案 2 :(得分:1)

您无法实现目标。您只需对代码做一点改动。

您正在使用JArray,这用于解析以[...]开头和结尾的json,而不是{...}

您的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