我有一个简单的JSON示例:
{
"items": {
"element": ["item 1","item 2"]
},
"name": "James"
}
和这样的JSON Schema:
{
'type': 'object',
'properties': {
'name': {'type':'string'},
'items': {
'type': 'object',
'properties':{
'element':{
'type':'array',
'items':[{'type':'string', 'type':'string'}]
}
}
}
},
'additionalProperties': false
}
使用给定的Schema和Data在JSON.NET中调用"IsValid()"
方法将返回VALID
。
问题:
如何遍历和编辑JSON中的元素?
我的目标是在数据库中查找节点"element"
的值,然后将其替换为通用值(如果它们存在),例如数据库中存在"item 1"
,并将替换为"general value A"
。但是,"item 2"
在数据库中不存在,并且在调用IsValid()
方法时应该抛出某种错误消息。
请注意,这是一个使用.NET 4.5和JSON.NET库的桌面应用程序,它将用作数据清理工具。只要它们与.NET 4.5兼容,我就可以使用任何类型的替代库。
答案 0 :(得分:0)
在IsValid()
问题中没有完全理解你的问题部分,但如果谈论遍历json元素和编辑,你可以使用2种方法。
首先在VS中的Package-Manager中安装Newtonsoft.Json:Install-package 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";