JSON元素阅读器.NET

时间:2015-01-25 09:24:39

标签: c# json winforms json.net

我有一个简单的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兼容,我就可以使用任何类型的替代库。

1 个答案:

答案 0 :(得分:0)

IsValid()问题中没有完全理解你的问题部分,但如果谈论遍历json元素和编辑,你可以使用2种方法。 首先在VS中的Package-Manager中安装Newtonsoft.Json:Install-package newtonsoft.json

  1. 创建类JsonItems,它描述您的输入JSON层次结构

      class JsonItems
      {
         public Items items;
         public string name;
      }
    
      class Items
      {
         public List<string> elements { get; set; }
      }
    
  2. 现在,您可以合法地反序列化您的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";