繁体   English   中英

如何使用JavaScriptSerializer解析具有许多嵌套的json数组

[英]How to parse json array with many nesting with JavaScriptSerializer

现在,我的json看起来很简单,并且只有一个对象。 假设json中会有很多对象,那我怎么解析呢。

现在我的json看起来像

    var jsonText = @"{
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        }
    }";

我正在这样解析

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(jsonText);

    Console.WriteLine(dict["some_number"]); 
    Console.WriteLine(dict["more_data"]["field2"]);
    Console.ReadLine();

当在json数组的每个序数中都有嵌套的对象时,我怎么用JavaScriptSerializer解析?

假设我的json看起来有点复杂,如下所示,那么我怎么能用JavaScriptSerializer解析它呢?

    var jsonText = @"data[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]";

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(jsonText);

    Console.WriteLine(dict["some_number"]); 
    Console.WriteLine(dict["more_data"]["field2"]);
    Console.ReadLine();

请告诉我如何使用JavaScriptSerializer解析上述json。 谢谢

编辑

根据您的指导更改json。 现在告诉我看起来正确吗?

    var jsonText = @"{ ""data""[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]}";

您的jsonText不是有效的json。 您可能需要类似:

var jsonText = @"{
                  ""data"":[
                      {......

使您的json有效,JavaScriptSerializer将正常工作。

编辑

如果我猜对了,那么您的对象必须是

var jsonText = @"{""data"":[
{
    ""some_number"": 108.541, 
    ""date_time"": ""2011-04-13T15:34:09Z"", 
    ""serial_number"": ""SN1234"",
    ""more_data"": {
        ""field1"": 1.0,
        ""field2"": ""hello""
    },
    ""Hobbies"" : [""game1"",""game2"",""game3""]
},
{
    ""some_number"": 200.541, 
    ""date_time"": ""2012-04-11T15:34:09Z"", 
    ""serial_number"": ""SN3333"",
    ""more_data"": {
        ""field1"": 2.0,
        ""field2"": ""hello1""
    },
    ""Hobbies"" : [""game4"",""game5"",""game6""]
}]}";

所以现在您可以像访问...那样访问对象

dict["data"]  //which is your array containing your two objects
dict["data"][0]["some_number"] //eg first object property
dict["data"][1]["more_data"]["field2"] //second object property...

使用观察面板调试对象。.您应该创建一个模型以将对象转换为模型。 除非需要,否则应避免拥有未知的模型。

我解决问题。 @itdoesntwork提示确实可以帮助我修复json错误。 在这里,我分享我的代码以展示我是如何做到的。

请添加对System.Web.Extensions引用,并使用System.Web.Script.Serialization;添加此名称空间System.Web.Script.Serialization; 在顶部

    var jsonText = @"{ ""data"":[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]}";

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(jsonText);

    Console.WriteLine(dict["data"][0]["some_number"]);
    Console.WriteLine(dict["data"][0]["more_data"]["field2"]);

    Console.WriteLine(dict["data"][1]["some_number"]);
    Console.WriteLine(dict["data"][1]["more_data"]["field2"]);
    Console.WriteLine(dict["data"][1]["Hobbies"][1]);

    Console.ReadLine();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM