解析大型 json



>我正在尝试解析一个json文件,然后对其进行操作以将数据插入SQL Server 2008数据库。

例:

var sr = new StreamReader("C:\path to filefile.json");
var json = JsonSerializer.SerializeToString(sr);
var o = JsonObject.Parse(json);

但我总是在第二行收到此错误 - "此流不支持超时"。

Json 文件如下所示:

"main":{
    "prg": [
               {
                   "Id": 1,
                   "name": "A&E",
                   more fields
               }
    "prg": [
               {
                   "Id": 2,
                   "name": "asda",
                   more fields
               }
 }

我需要做这样的东西

foreach (prg in main)
    entity.id = prg.id
    entity.name = prg.name

我该怎么做,为什么会出现超时异常?

编辑:为了更好地理解我的问题,这就是我对XML文件所做的

XmlDocument sourceDoc = new XmlDocument();
sourceDoc.Load(SourcesElement2); // where SourcesElement2 is the path to my XML
XmlNodeList prg = sourceDoc.GetElementsByTagName("prg");
foreach (XmlNode item in prg)
{
    entity.Name= item.SelectSingleNode("name").InnerText;
    ...
}

我已经将XML转换为Json,我想做同样的事情。对于 Json 文件中的每个"prg"节点,在数据库中插入一个新项

编辑2:

这就是我所做的。

    using (
            StreamReader stream =
                File.OpenText(
                    "C:\path\Sources.json")
            )
        {
            JObject sources = (JObject) JToken.ReadFrom(new JsonTextReader(stream));
            var a = sources["on"];
            var b = a["sources"];
            var c = b["prgs"];
            foreach (var item in c)
            {
                var d= item.SelectToken("prg");
                // Here d is null
            }

我有与上面相同的问题。对于 Json 文件中的每个"prg"节点,在数据库中插入一个新项。我该怎么做? ( PRG 的路径已打开/来源/PRGS/)

我认为您不想序列化流。

JsonSerializer.SerializeToString(sr)

您希望从流中反序列化

JsonSerializer.Deserialize

出于性能原因,您可能希望使用 JsonReader。

您的 XML 示例将整个文件加载到内存中 - 您不希望对大型文档执行此操作。 reader.Read()模式更适合处理大型文件。

对于每个有相同问题的人,这就是我所做的(注意:这只是一个例子)

顺便说一句,感谢所有试图回答我问题的人,我很抱歉我的错误。

        List<string> d = new List<string>();
        using (
            StreamReader stream =
                File.OpenText(
                    "C:\path\Sources.json")
            )
        {
            JObject sources = (JObject) JToken.ReadFrom(new JsonTextReader(stream));
            var a = sources["on"];
            var b = a["sources"];
            var c = b["prgs"];
            foreach (JObject item in c["prg"].ToList())
            {
                d.Add(item.Value<string>("name"));
            }
        }
        //part below is just for testing
        foreach (var VARIABLE in d)
        {
            Console.WriteLine(VARIABLE);
        }
        Console.ReadLine();

我会将该 JSON 对象转换为 C# 类,然后将逻辑应用于 C# 对象和/或使用数据表[注意:网上有一些解决方案表明,您可以轻松地将ObjectList<Object>传递到DataTable中,然后将其"轻松"传递给SQL]

第一步仍然是您在任一解决方案中的打嗝,如何从文件系统中提取大型 JSON 字符串

如果您有 JSON,请使用 json2csharp.com 和/或 jsonutils.com 检索类,以便将其反序列化为对象。

StreamReader re = new StreamReader(@"C:path to filefile.json");
JsonTextReader reader = new JsonTextReader(re);
YourClass DeserializedObject = se.Deserialize<YourClass>(reader);
Console.WriteLine(DeserializeObject.SomeProperty);

相关内容

  • 没有找到相关文章

最新更新