从大文件读取JSON对象
我正在寻找一个JSON分析器,该分析器可以让我从大型JSON文件(大小为几百MB)中遍历JSON对象。我从Json.NET尝试了JsonTextReader,如下所示:
JsonTextReader reader = new JsonTextReader(new StringReader(json));while (reader.Read())
{
if (reader.Value != null)
Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
else
Console.WriteLine("Token: {0}", reader.TokenType);
}
但是它在令牌之后返回令牌。
如果我需要整个对象而不是令牌,有没有更简单的方法?
回答:
假设您有一个与此类似的json数组:
[{"text":"0"},{"text":"1"}......]
我将为对象类型声明一个类
public class TempClass{
public string text;
}
现在,反序列化部分
JsonSerializer ser = new JsonSerializer();ser.Converters.Add(new DummyConverter<TempClass>(t =>
{
//A callback method
Console.WriteLine(t.text);
}));
ser.Deserialize(new JsonTextReader(new StreamReader(File.OpenRead(fName))),
typeof(List<TempClass>));
还有一个伪JsonConverter类来拦截反序列化
public class DummyConverter<T> : JsonConverter{
Action<T> _action = null;
public DummyConverter(Action<T> action)
{
_action = action;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(TempClass);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
serializer.Converters.Remove(this);
T item = serializer.Deserialize<T>(reader);
_action( item);
return null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
以上是 从大文件读取JSON对象 的全部内容, 来源链接: utcz.com/qa/407008.html