C# 使用System.Text.Json一次读取一条记录
我试图使用.NETCore3.0一次性将一条json记录读入内存 本页: 使用读卡器给出此示例:C# 使用System.Text.Json一次读取一条记录,c#,asp.net-core,asp.net-core-3.0,system.text.json,C#,Asp.net Core,Asp.net Core 3.0,System.text.json,我试图使用.NETCore3.0一次性将一条json记录读入内存 本页: 使用读卡器给出此示例: byte[] data = Encoding.UTF8.GetBytes(json); Utf8JsonReader reader = new Utf8JsonReader(data, isFinalBlock: true, state: default); while (reader.Read()) { Console.Write(reader.TokenType); swit
byte[] data = Encoding.UTF8.GetBytes(json);
Utf8JsonReader reader = new Utf8JsonReader(data, isFinalBlock: true, state: default);
while (reader.Read())
{
Console.Write(reader.TokenType);
switch (reader.TokenType)
{
case JsonTokenType.PropertyName:
case JsonTokenType.String:
{
string text = reader.GetString();
Console.Write(" ");
Console.Write(text);
break;
}
case JsonTokenType.Number:
{
int value = reader.GetInt32();
Console.Write(" ");
Console.Write(value);
break;
}
// Other token types elided for brevity
}
Console.WriteLine();
}
在本例中,它加载整个字节数组。我主要关心的是内存,因为我正在处理大型json文件,我不想只加载当前正在处理的记录(或者至少加载一个较小的块)
我不知道如何将字节流传递到Utf8JsonReader
并一次读取一条记录
使用.net core 3.0一次读取一条记录的简单方法是什么?实现这种形式的功能的方法是将JSON行文件格式与
StreamReader
类一起使用。JSON行文件扩展名为.jsonl
这将在每个JSON对象后使用新行字符修改JSON字符串。有了它,您可以使用StreamReader.ReadLine
,然后反序列化整行
有关更多详细信息,请参见JSON行 由于json“包装”了整个json主体的大部分内容,我怀疑逐行阅读它的可能性。也许你可以把它保存在更小的块中,例如每个文件只有10k个条目。如果您需要一些工作,您可能还可以通过查找匹配的大括号将其切分为更小的部分,并解析中间的内容等。没有任何
JsonTextReader
等效项?您的输入是多个项目的简单数组,还是隐藏在其他元素中?如果它是一个简单的数组,您可能能够读入每个元素(逐字符以{}
开始和结束,但除此之外,我怀疑它是否可能。我不知道更简单的方法,但如果您确实需要解决方案来迭代每个对象。最好在打开和关闭{}时与regex匹配
我在这里找到了如何做我想做的事情的示例: