C# 用NewtonSoft替换Json属性
不知道从哪里开始,所以我没有任何示例代码 我需要更改json文档中属性的名称C# 用NewtonSoft替换Json属性,c#,asp.net-core,json.net,C#,Asp.net Core,Json.net,不知道从哪里开始,所以我没有任何示例代码 我需要更改json文档中属性的名称 var json = (@"{""id"":""12"", ""title"":""My Title"", ""Chunks"":[ { ""id"":""137"", ""title"":""Title"", ""description"":""null"", ""selections"":[
var json = (@"{""id"":""12"",
""title"":""My Title"",
""Chunks"":[
{
""id"":""137"",
""title"":""Title"",
""description"":""null"",
""selections"":[
{
""id"":""169"",
""title"":""Choice"",
""sort_order"":""null"",
""questions"":[
]
}
]
}
]
}
}
}");
我需要将值为12的“id”更改为“document_id”,而不使用其他id。是否有像NewtonSoft这样的C#库允许您更改属性而不是属性值。似乎是一个常见的场景,但我还没有看到任何接近我正在尝试做的事情。我想我可以将json转换为字符串并进行替换,但这似乎不是很优雅 使用
Newtonsoft.Json.Linq.JObject
的方法如下所示:
var obj = JObject.Parse(json);
obj["document_id"] = obj["id"]; // create new property called "document_id"
obj.Remove("id"); // remove the "id" property
Console.WriteLine(obj);
还要注意,您的JSON是无效的。它的末尾有两个额外的
}
。假设当可能有多个节点的键为“id”和值为“12”时,您希望替换所有键,您可以使用Linq来标识键为“id”和值为“12”的令牌,然后使用添加/删除方法来创建具有不同名称的新节点
比如说,
JToken node = JToken.Parse(json);
var jObjectsWithTitle = node
.SelectTokens("$..*")
.OfType<JObject>()
.Where(x => x.Property("id") != null && Convert.ToInt32(x.Property("id").Value) == 12);
foreach(var item in jObjectsWithTitle)
{
item.TryGetValue("id",out var currentValue);
item.Add("document_id",currentValue);
item.Remove("id");
}
JToken节点=JToken.Parse(json);
var jObjectsWithTitle=节点
.选择代币($..*)
第()类
其中(x=>x.Property(“id”)!=null&&Convert.ToInt32(x.Property(“id”).Value)==12);
foreach(jObjectsWithTitle中的var项)
{
项目TryGetValue(“id”,输出var电流值);
添加(“文件id”,当前值);
项目。删除(“id”);
}
请参阅其中说明了如何遍历JSON对象并对其执行操作。另请参阅: