我有一个简单的JSON示例,如下所示:
{
"items": {
"element": ["item 1","item 2"]
},
"name": "James"
}
和这样的 JSON 架构:
{
'type': 'object',
'properties': {
'name': {'type':'string'},
'items': {
'type': 'object',
'properties':{
'element':{
'type':'array',
'items':[{'type':'string', 'type':'string'}]
}
}
}
},
'additionalProperties': false
}
使用给定的架构和数据在 JSON.NET 中调用"IsValid()"
方法将返回VALID
。
问题:
如何遍历和编辑 JSON 中的元素?
我的目标是在数据库中查找节点"element"
的值,然后用广义值替换它(如果它们存在),例如"item 1"
数据库中存在并将替换为"general value A"
。但是,数据库中不存在"item 2"
,并且在调用该方法时应引发某种错误消息IsValid()
。
请注意,这是一个使用 .NET 4.5 和 JSON.NET 库的桌面应用程序,它将用作数据清理工具。我对任何类型的替代库持开放态度,只要它们与 .NET 4.5 兼容。
不完全理解您的问题IsValid()
问题部分,但如果谈论遍历 json 元素和编辑,您可以使用 2 种方法。首先在VS:Install-package newtonsoft.json
的Package-Manager中安装Newtonsoft.Json。
-
创建类
JsonItems
,描述输入 JSON 层次结构class JsonItems { public Items items; public string name; } class Items { public List<string> elements { get; set; } }
现在,您可以合法地反序列化 json,并将result
编辑为任何 .net 对象。
string jsonItems = @"{
'items': {
'element': ['item 1','item 2']
},
'name': 'James'
}";
var result = JsonConvert.DeserializeObject<JsonItems>(jsonItems);
result.items = new Items
{
elements = new List<string> {"itemd 3", "item 4"}
};
2. 第二种方法更快(在实现中),但在运行时不太安全。在dynamic
的帮助下.
dynamic d = JObject.Parse(jsonItems);
d.items.element[1] = "item 3";