Json对象处理.将对象处理成dic数组.
2017-06-27 16:21
330 查看
var parser = new JsonConfigurationFileParser();
var dict = parser.Parse("json");
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
internal class JsonConfigurationFileParser
{
private readonly IDictionary<string, string> _data = new SortedDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
private readonly Stack<string> _context = new Stack<string>();
private string _currentPath;
public IDictionary<string, string> Parse(string content)
{
_data.Clear();
var jsonConfig = JObject.Parse(content);
VisitJObject(jsonConfig);
return _data;
}
private void VisitJObject(JObject jObject)
{
foreach (var property in jObject.Properties())
{
EnterContext(property.Name);
VisitProperty(property);
ExitContext();
}
}
private void VisitProperty(JProperty property)
{
VisitToken(property.Value);
}
private void VisitToken(JToken token)
{
switch (token.Type)
{
case JTokenType.Object:
VisitJObject(token.Value<JObject>());
break;
case JTokenType.Array:
VisitArray(token.Value<JArray>());
break;
case JTokenType.Integer:
case JTokenType.Float:
case JTokenType.String:
case JTokenType.Boolean:
case JTokenType.Bytes:
case JTokenType.Raw:
case JTokenType.Null:
VisitPrimitive(token);
break;
default:
throw new FormatException("FormatError_UnsupportedJSONToken");
}
}
private void VisitArray(JArray array)
{
for (int index = 0; index < array.Count; index++)
{
EnterContext(index.ToString());
VisitToken(array[index]);
ExitContext();
}
}
private void VisitPrimitive(JToken data)
{
var key = _currentPath;
if (_data.ContainsKey(key))
{
throw new FormatException("FormatError_KeyIsDuplicated");
}
_data[key] = data.ToString();
}
private void EnterContext(string context)
{
_context.Push(context);
_currentPath = ConfigurationPath.Combine(_context.Reverse());
}
private void ExitContext()
{
_context.Pop();
_currentPath = ConfigurationPath.Combine(_context.Reverse());
}
}
}
相关文章推荐
- JS 处理JSON数据及javascript处理对象、JSON对象、hash对象、数组对象的方法
- Gson处理前端传递过来的Json对象数组
- 【第21篇】通过Gson去把字符串转成json,对象转成Json,数组转换成Json处理Json数据
- js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
- jquery mvc ajax json 当返回json的数据为数组对象时。该如何处理?
- 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
- Json对象和数组 格式,取值,特殊属性名取值:(处理方式和EL取值一样: 对象["属性名"])
- js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
- 处理 JSON null 和空数组及对象
- Elasticsearch-PHP 处理JSON数组和对象
- JSON对象、数组和处理JSON串的方法
- json格式对象和数组的不同处理方法
- spring mvc 集合、数组传参(本质是json对象的处理)
- XML在java或.NET中转为Json的数组或对象数据时的处理
- java对象怎么转json数组
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- JSON对象数组到Java的转换
- jackson处理json对象相关小结
- javascript将一对象(包括数组、JSON、function)转换成字符串
- JSON的数组对象 可以向javascript的Array对象一样操作