Как разобрать массив json со многими вложениями с помощью JavaScriptSerializer - PullRequest
0 голосов
/ 21 мая 2018

Прямо сейчас мой 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();

Скажите, пожалуйста, как я могу проанализировать вышеуказанный JSON с JavaScriptSerializer.Спасибо

РЕДАКТИРОВАТЬ

Измените 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 ]

0 голосов
/ 21 мая 2018

Я решаю проблему.Подсказка @itdoesntwork действительно помогает мне исправить ошибку 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();
0 голосов
/ 21 мая 2018

Ваш 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...

использовать панель часов для отладки вашего объекта. Вы должны создать модельбросить свой объект в ваши модели.Неизвестные модели следует избегать, если в этом нет необходимости.

...