Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/245: Рейтинг темы: голосов - 245, средняя оценка - 4.89
Valera_li

Парсинг Json строки в объект и массив

12.06.2012, 19:20. Показов 46063. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
json
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
   "json":[
      {
         "zayavki":[
            {
               "uuid":"562cea6c-663f-4322-94a3-fd67747209e3",
               "date":"11/06/2012",
               "coment":"",
               "firm_id":"20"
            }
         ]
      },
      {
         "tovar":[
            {
               "uuid":"562cea6c-663f-4322-94a3-fd67747209e3",
               "pricer":"152,
               00               ",
               "kol":"5",
               "st_grup_id":"1885"
            }
         ]
      }
   ]
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string js = "{ "json" : [ { "zayavki" : [ { "uuid" : "562cea6c-663f-4322-94a3-fd67747209e3" , "date" : "11/06/2012" , "coment" : "" , "firm_id" : "20"} ]},{ "tovar" : [ {"uuid" : "562cea6c-663f-4322-94a3-fd67747209e3" , "pricer" : "152,00" , "kol" : "5" , "st_grup_id" : "1885" } ] } ] }";
 
            try
            {
            
                Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(js);
                Newtonsoft.Json.Linq.JToken json_token = jObject["json"][0];//токен на массив массивов
 
                players = json_token["zayavki"].ToArray();
 
            }
            catch (Exception e)
            {
                
            }
и выдает что то - Newtonsoft.Json.JsonReaderException: JsonToken EndArray is not valid for closing JsonType Object. Path 'json[0].zayavki[0]', line 1, position 140. в Newtonsoft.Json.JsonReader.ValidateEnd(J sonToken endToken) в Newtonsoft.Json.JsonTextReader.ParsePost Value() в Newtonsoft.Json.JsonTextReader.ReadInter nal() в Newtonsoft.Json.JsonTextReader.Read() в Newtonsoft.Json.Linq.JContainer.ReadCont entFrom(JsonReader r) в Newtonsoft.Json.Linq.JContainer.ReadToke nFrom(JsonReader reader) в Newtonsoft.Json.Linq.JObject.Load(JsonRe ader reader) в Newtonsoft.Json.Linq.JObject.Parse(Strin g json) в WebService3.Service1.Send_data(String login, String password, String imei, String data)

Вопрос что я делаю не так? Мне нужно пройти по массиву zayavki и получать значения итемов.
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2012, 19:20
Ответы с готовыми решениями:

Парсинг JSON. Объект в объекте
помогите, пожалуйста, получить данные из model объекта freight и passenger. Проблема заключается в том, что массив находится в объекте, а...

Парсинг ячеек таблицы и создание Json-объект из строк
просматривал форум и нашел решение по получению данных из ячеек. попробовал переделать код. /*синтаксический анализ таблицы и...

Парсинг строки json
Укажите пожалуйста на ошибку: Структура JSON файла: { "threads":, ], "omit":2, ...

8
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
12.06.2012, 19:47
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using Newtonsoft.Json;
 
[JsonObject(MemberSerialization.OptIn)]
struct MyJsonObject
{
    [JsonProperty("uuid")]
    public string Uuid { get; set; }
 
    [JsonProperty("date")]
    public DateTime Date { get; set; }
 
    [JsonProperty("comment")]
    public string Comment { get; set; }
 
    [JsonProperty("firm_id")]
    public string FirmID { get; set; }
}
 
 
class Program
{
    static void Main(string[] args)
    {
        string js = "{ \"json\" : [ { \"zayavki\" : [ { \"uuid\" : " + 
            "\"562cea6c-663f-4322-94a3-fd67747209e3\" , \"date\" " +
            ": \"11/06/2012\" , \"coment\" : \"\" , \"firm_id\" : " + 
            "\"20\"} ]},{ \"tovar\" : [ {\"uuid\" : \"562cea6c-663f-" + 
            "4322-94a3-fd67747209e3\" , \"pricer\" : \"152,00\" , \"kol\" " + 
            ": \"5\" , \"st_grup_id\" : \"1885\" } ] } ] }";
        Newtonsoft.Json.Linq.JObject obj = Newtonsoft.Json.Linq.JObject.Parse(js);
        MyJsonObject[] objArr = JsonConvert.DeserializeObject<MyJsonObject[]>(obj["json"][0]["zayavki"].ToString());
        foreach (MyJsonObject myJsonObj in objArr)
        {
            Console.WriteLine("Uuid: {0}", myJsonObj.Uuid);
            Console.WriteLine("Date: {0}", myJsonObj.Date.ToString("dd/MM/yyyy"));
            Console.WriteLine("Comment: {0}", myJsonObj.Comment);
            Console.WriteLine("FirmID: {0}", myJsonObj.FirmID);
            Console.WriteLine(new string('-', 10));
        }
        Console.ReadKey(true);
    }
}
4
Valera_li
12.06.2012, 20:59
Спасибо большое )
C#
1
2
Object_Zayavki[] zayavki_arr = JsonConvert.DeserializeObject<Object_Zayavki[]>(jObject["json"][0]["zayavki"].ToString());
                Object_Tovari[] tovar_arr = JsonConvert.DeserializeObject<Object_Tovari[]>(jObject["json"][1]["tovar"].ToString());
это то что я хотел.
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 3
30.12.2013, 20:07
Помогите, пожалуйста!

C#
1
2
3
4
5
6
7
public static OrderList ReadFromJObject(JObject o)
{
    return new OrderList()
    {
        List = o.OfType<KeyValuePair<string, JToken>>().ToDictionary(item => int.Parse(item.Key), item => Order.ReadFromJObject(item.Value as JObject))
    };
}
Возвращает пустой словарь, хотя на входе получает 100% не пустой JObject. Уже не знаю, в какую сторону думать - все перепробовал.
Заранее благодарен.

Добавлено через 3 минуты
Кстати, строка
C#
1
IEnumerable<KeyValuePair<string, JToken>> ienum = o.OfType<KeyValuePair<string, JToken>>();
тоже возвращает значение, где source == null.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
30.12.2013, 22:08
al_smaster, где JSON где парсинг?
0
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
30.12.2013, 22:40
Неожиданно...
C#
1
System.Web.Helpers.Json
для псевдоспецов
0
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 3
31.12.2013, 09:30
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "success": 1,
  "return": {
    "107230539": {
      "pair": "ltc_rur",
      "type": "sell",
      "amount": 1.0,
      "rate": 820.0,
      "timestamp_created": 1388467252,
      "status": 0
    }
  }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public OrderList GetActiveOrders(BtcePair? pair = null)
{
    var args = new Dictionary<string, string>()
        {
            { "method", "ActiveOrders" }
        };
 
    if (pair != null) args.Add("pair", pair.ToString());
 
    var result = JObject.Parse(Query(args));
    if (result.Value<int>("success") == 0)
        throw new Exception(result.Value<string>("error"));
 
    return OrderList.ReadFromJObject(result["return"] as JObject);
}
 
public class Order
{
    public BtcePair Pair { get; private set; }
    public TradeType Type { get; private set; }
    public decimal Amount { get; private set; }
    public decimal Rate { get; private set; }
    public UInt32 TimestampCreated { get; private set; }
    public int Status { get; private set; }
    public static Order ReadFromJObject(JObject o)
    {
        if ( o == null )
            return null;
        return new Order()
        {
            Pair = BtcePairHelper.FromString(o.Value<string>("pair")),
            Type = TradeTypeHelper.FromString(o.Value<string>("type")),
            Amount = o.Value<decimal>("amount"),
            Rate = o.Value<decimal>("rate"),
            TimestampCreated = o.Value<UInt32>("timestamp_created"),
            Status = o.Value<int>("status")
        };
    }
}
 
public class OrderList
{
    public Dictionary<int, Order> List { get; private set; }
    public static OrderList ReadFromJObject(JObject o)
    {
        IEnumerable<KeyValuePair<string, JToken>> ienum = o.OfType<KeyValuePair<string, JToken>>();
        return new OrderList()
        {
            List = o.OfType<KeyValuePair<string, JToken>>().ToDictionary(item => int.Parse(item.Key), item => Order.ReadFromJObject(item.Value as JObject))
        };
    }
}
Здесь ienum уже пустой.
0
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 3
02.01.2014, 10:26
Проблема решилась. Вместо OfType использовал AsEnumerable.
0
0 / 0 / 0
Регистрация: 06.01.2018
Сообщений: 1
06.01.2018, 19:24
А можно пример работающего кода ?
Я не понял, как поменять OfType на AsEnumerable
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2018, 19:24
Помогаю со студенческими работами здесь

Парсинг JSON строки
Доброго времени суток! :) Написал &quot;парсер&quot; JSON для своих нужд. :D Что парсил (пытался экранировать кавычки в строке, но форум их...

Парсинг строки JSON
Tcnm json строка типа: вот класс для парсинга: public class ResultJson { public string...

Парсинг JSON-строки и вывод данных из строки
Добрый день! Я разрабатываю Android-клиент, который мог бы обмениваться данными с размещенной WCf-службой. Для чтения данных из службы...

JSON массив из PHP, получаю объект, а нужен массив
Всем привет! Формирую массив на стороне сервера, массив - результат выборки из БД. Передаю его на клиент. $list = $cat -&gt;...

Парсинг JSON. Массив из разных объектов
Пытаюсь разобрать json с помощью Newtonsoft.Json. В тексте массив разных объектов - документов, некоторые поля повторяются, т.е. будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru