代码之家  ›  专栏  ›  技术社区  ›  Mist

如何用javascriptserializer解析多嵌套的JSON数组

  •  0
  • Mist  · 技术社区  · 8 年前

    现在我的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""]
        }]}";
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   itdoesntwork    8 年前

    您的jContext不是有效的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...
    

    使用监视面板调试对象。您应该创建一个模型来将对象投射到模型中。除非需要,否则应避免使用未知模型。

        2
  •  0
  •   Mist    8 年前

    我把问题分类。@它没有网络提示真的帮助我修复JSON错误。 在这里,我分享我的代码来展示我是如何做到的。

    请添加参考 System.Web.Extensions 并使用添加此命名空间 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();