Обработка JSON

TomJhon

Client
Регистрация
03.04.2020
Сообщения
33
Благодарностей
2
Баллы
8
Здравствуйте. Перечитал все справки, потыкал везде где можно, так и не могу понять. В форуме искал )

Задача: нужно из JSON запроса SMSHUB разобрать по странам, выявить самые дешевые цены и количество номеров.

В переменные парсить получилось. А уже в таблицу не получается.


Ответ дается в формате: { "Страна": { "Сервис": { "Цена": Количество}}}

То что приходит ответом ниже.

Помогите пожалуйста:
1. Спарсить в таблицу
СтранаСервисЦенаКоличество
0wa6.001

2. Как потом из таблицы выделить самую дешевую цену при количестве от 10?


JSON:
{
  "0": {
    "wa": {
      "6.00": 1
    }
  },
  "1": {
    "wa": {
      "27.00": 40,
      "29.33": 16,
      "29.56": 71,
      "30.00": 101
    }
  },
  "2": {
    "wa": {
      "9.96": 1076,
      "9.99": 23
    }
  },
  "3": {},
  "4": {
    "wa": {
      "22.50": 1281,
      "24.35": 14,
      "24.99": 188,
      "25.00": 47
    }
  },
  "5": {
    "wa": {
      "21.00": 137
    }
  },
  "6": {},
  "7": {
    "wa": {
      "45.00": 150,
      "49.29": 660,
      "49.31": 127,
      "49.99": 424,
      "50.00": 1455
    }
  },
  "8": {
    "wa": {
      "13.50": 428,
      "14.99": 58,
      "15.00": 53
    }
  },
  "9": {
    "wa": {
      "21.00": 36
    }
  },
  "10": {
    "wa": {
      "6.75": 1673,
      "8.13": 591,
      "8.68": 155,
      "13.47": 20,
      "13.48": 42,
      "13.49": 4778
    }
  },
  "11": {
    "wa": {
      "15.30": 697,
      "17.00": 15
    }
  },
  "12": {
    "wa": {
      "9.03": 14021,
      "9.16": 1962,
      "9.68": 51988,
      "9.97": 500,
      "10.00": 386
    }
  },
  "13": {
    "wa": {
      "50.00": 137
    }
  },
  "14": {
    "wa": {
      "71.01": 4,
      "71.02": 1635,
      "71.04": 473
    }
  },
  "15": {
    "wa": {
      "54.00": 182,
      "59.93": 227,
      "60.00": 84
    }
  },
  "16": {
    "wa": {
      "32.69": 36,
      "32.71": 34,
      "32.72": 162,
      "34.88": 3,
      "34.89": 85,
      "34.92": 2748,
      "34.93": 17,
      "34.97": 42,
      "35.00": 181
    }
  },
  "17": {
    "wa": {
      "28.00": 1
    }
  },
  "18": {
    "wa": {
      "20.00": 7
    }
  },
  "19": {},
  "20": {},
  "21": {
    "wa": {
      "41.97": 2,
      "42.00": 2
    }
  },
  "22": {
    "wa": {
      "7.87": 1
    }
  },
  "23": {},
  "24": {},
  "25": {
    "wa": {
      "13.50": 1769,
      "22.00": 351
    }
  },
  "26": {
    "wa": {
      "20.25": 3,
      "25.00": 2
    }
  },
  "27": {
    "wa": {
      "20.00": 36
    }
  },
  "28": {},
  "29": {
    "wa": {
      "50.00": 1
    }
  },
  "30": {
    "wa": {
      "100.00": 6
    }
  },
  "31": {
    "wa": {
      "25.00": 3
    }
  },
  "32": {
    "wa": {
      "34.80": 32,
      "34.91": 6,
      "34.95": 358,
      "34.96": 61,
      "35.00": 4
    }
  },
  "33": {
    "wa": {
      "42.00": 251
    }
  },
  "34": {
    "wa": {
      "6.68": 145,
      "11.93": 226,
      "11.97": 124,
      "11.99": 99,
      "12.00": 242
    }
  },
  "36": {
    "wa": {
      "12.49": 107189
    }
  },
  "37": {
    "wa": {
      "50.00": 57
    }
  },
  "38": {
    "wa": {
      "25.00": 2
    }
  },
  "39": {
    "wa": {
      "26.00": 1095
    }
  },
  "40": {
    "wa": {
      "15.00": 38,
      "30.00": 25
    }
  },
  "41": {},
  "42": {
    "wa": {
      "33.33": 6
    }
  },
  "43": {
    "wa": {
      "57.77": 317,
      "57.79": 123,
      "57.83": 64,
      "59.97": 300,
      "59.99": 185,
      "60.00": 22
    }
  },
  "44": {
    "wa": {
      "24.92": 234
    }
  },
  "45": {
    "wa": {
      "35.00": 28
    }
  },
  "46": {},
  "47": {
    "wa": {
      "100.00": 14
    }
  },
  "48": {
    "wa": {
      "35.00": 141,
      "47.05": 56,
      "69.33": 6,
      "69.98": 62,
      "70.00": 348
    }
  },
  "49": {
    "wa": {
      "24.96": 17,
      "25.00": 72
    }
  },
  "50": {},
  "51": {
    "wa": {
      "75.00": 1065
    }
  },
  "52": {},
  "53": {},
  "54": {},
  "55": {},
  "56": {
    "wa": {
      "74.98": 6
    }
  },
  "58": {
    "wa": {
      "21.00": 73
    }
  },
  "59": {},
  "60": {
    "wa": {
      "17.96": 2,
      "18.00": 1704
    }
  },
  "61": {
    "wa": {
      "30.00": 14
    }
  },
  "62": {
    "wa": {
      "98.76": 2,
      "100.00": 1051
    }
  },
  "63": {
    "wa": {
      "72.38": 75,
      "72.40": 46,
      "72.45": 49,
      "72.48": 1,
      "75.00": 6
    }
  },
  "64": {
    "wa": {
      "25.00": 16
    }
  },
  "65": {},
  "66": {
    "wa": {
      "19.00": 2183
    }
  },
  "67": {},
  "68": {
    "wa": {
      "48.00": 12
    }
  },
  "69": {
    "wa": {
      "40.00": 35
    }
  },
  "70": {
    "wa": {
      "25.00": 18
    }
  },
  "71": {
    "wa": {
      "27.00": 9
    }
  },
  "72": {
    "wa": {
      "16.00": 2
    }
  },
  "73": {
    "wa": {
      "36.85": 66,
      "36.87": 928,
      "36.99": 463,
      "37.00": 470
    }
  },
  "74": {},
  "75": {
    "wa": {
      "19.60": 7
    }
  },
  "76": {
    "wa": {
      "30.00": 2
    }
  },
  "77": {},
  "78": {
    "wa": {
      "37.50": 173,
      "57.33": 7,
      "62.73": 56,
      "65.00": 188,
      "65.01": 371,
      "72.97": 61,
      "74.44": 12,
      "75.00": 343
    }
  },
  "79": {
    "wa": {
      "24.00": 19
    }
  },
  "80": {
    "wa": {
      "25.00": 10
    }
  },
  "81": {
    "wa": {
      "24.64": 36,
      "24.69": 46
    }
  },
  "82": {
    "wa": {
      "75.00": 86
    }
  },
  "83": {
    "wa": {
      "85.00": 45
    }
  },
  "84": {},
  "85": {
    "wa": {
      "31.50": 40
    }
  },
  "86": {},
  "87": {
    "wa": {
      "30.00": 2
    }
  },
  "88": {
    "wa": {
      "28.00": 1052
    }
  },
  "89": {
    "wa": {
      "28.00": 1066
    }
  },
  "90": {
    "wa": {
      "27.73": 2
    }
  },
  "91": {},
  "92": {},
  "93": {},
  "94": {
    "wa": {
      "26.00": 1
    }
  },
  "95": {},
  "96": {
    "wa": {
      "20.00": 1
    }
  },
  "97": {},
  "99": {
    "wa": {
      "21.80": 1
    }
  },
  "100": {},
  "101": {
    "wa": {
      "28.00": 5
    }
  },
  "102": {
    "wa": {
      "36.00": 25
    }
  },
  "103": {},
  "104": {},
  "105": {},
  "106": {},
  "107": {},
  "108": {},
  "109": {
    "wa": {
      "25.20": 95,
      "28.00": 9
    }
  },
  "111": {},
  "112": {
    "wa": {
      "30.00": 1
    }
  },
  "114": {
    "wa": {
      "25.00": 1058
    }
  },
  "115": {
    "wa": {
      "25.00": 45
    }
  },
  "116": {},
  "117": {
    "wa": {
      "61.91": 17,
      "61.99": 11,
      "63.84": 100,
      "64.72": 2
    }
  },
  "118": {},
  "119": {
    "wa": {
      "21.49": 2
    }
  },
  "120": {
    "wa": {
      "25.00": 11
    }
  },
  "121": {},
  "122": {},
  "123": {
    "wa": {
      "26.00": 4
    }
  },
  "124": {},
  "125": {},
  "126": {},
  "128": {
    "wa": {
      "48.89": 52
    }
  },
  "129": {
    "wa": {
      "49.95": 64,
      "50.00": 30
    }
  },
  "130": {
    "wa": {
      "21.49": 2
    }
  },
  "131": {
    "wa": {
      "21.20": 1
    }
  },
  "132": {},
  "133": {
    "wa": {
      "30.00": 4
    }
  },
  "135": {
    "wa": {
      "25.00": 1
    }
  },
  "136": {
    "wa": {
      "21.49": 1
    }
  },
  "137": {
    "wa": {
      "22.00": 2
    }
  },
  "138": {
    "wa": {
      "21.00": 1
    }
  },
  "139": {
    "wa": {
      "21.49": 5
    }
  },
  "140": {},
  "141": {},
  "142": {},
  "143": {
    "wa": {
      "25.00": 7
    }
  },
  "144": {},
  "145": {},
  "146": {},
  "147": {
    "wa": {
      "19.00": 2
    }
  },
  "148": {
    "wa": {
      "35.00": 781
    }
  },
  "149": {
    "wa": {
      "23.87": 18
    }
  },
  "150": {},
  "151": {
    "wa": {
      "25.00": 111
    }
  },
  "152": {
    "wa": {
      "30.00": 11
    }
  },
  "153": {
    "wa": {
      "25.00": 7
    }
  },
  "154": {},
  "155": {},
  "156": {},
  "157": {
    "wa": {
      "20.00": 4
    }
  },
  "158": {},
  "159": {},
  "160": {},
  "161": {},
  "163": {
    "wa": {
      "100.00": 49
    }
  },
  "164": {},
  "165": {},
  "167": {},
  "168": {},
  "170": {},
  "172": {
    "wa": {
      "60.00": 39
    }
  },
  "173": {},
  "174": {},
  "175": {},
  "176": {},
  "177": {
    "wa": {
      "26.67": 3
    }
  },
  "178": {
    "wa": {
      "33.33": 1
    }
  },
  "179": {},
  "180": {},
  "181": {},
  "183": {},
  "184": {},
  "185": {},
  "187": {
    "wa": {
      "79.81": 4,
      "79.98": 960,
      "80.00": 386
    }
  },
  "189": {},
  "196": {}
}
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 631
Благодарностей
1 225
Баллы
113
1. Парсим полученный результат кубиком Парсинг JSON/XML.
2. Пробегаем весь JSON (постоянно увеличивая счетчик), раскладывая каждую строку по переменным и складывая в таблицу.
3. Юзаем кубик сортировки таблицы по возрастанию.
4. Выбираем первую строку из таблицы.

upd. Точнее, 2 и 3 пункты объединяем, сразу складывая в таблицу из JSON.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Пример для WA сделал. В "Директивах и общем коде" есть необходимый класс. По аналогии можно сделать и для других каких-то сервисов, думаю..
Если не сможешь переменные из шарпа положить в переменные проекта - сообщи.
 

Вложения

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Конечно, по-хорошему, еще добавить булевое значение, как индикатор того, что мы хотя бы одно вхождение по критериям нашли..
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
string service = "wa";
long minimum_count = long.Parse("10");

List<string[]> list = new List<string[]>();
foreach(string i in project.Json.GetMembersList()){
    try{
        foreach(string price in project.Json.GetMember(i).GetMember(service).GetMembersList()){
            long count = (long)project.Json.GetMember(i).GetMember(service).GetMember(price);
            if(count >=  minimum_count){
                list.Add(new string[] {i, price, count.ToString()});
            }
        }
    }catch{}
}
string[] result = list.OrderBy(x=>double.Parse(x[1].Replace(".",","))).First();
project.SendInfoToLog($"страна - {result[0]}, цена - {result[1]}, количество - {result[2]}");
return result[0];
 
Последнее редактирование:
  • Спасибо
Реакции: TomJhon

TomJhon

Client
Регистрация
03.04.2020
Сообщения
33
Благодарностей
2
Баллы
8
C#:
string service = "wa";
long minimum_count = long.Parse("10");

List<string[]> list = new List<string[]>();
foreach(string i in project.Json.GetMembersList()){
    try{
        foreach(string price in project.Json.GetMember(i).GetMember(wa).GetMembersList()){
            long count = (long)project.Json.GetMember(i).GetMember(wa).GetMember(price);
            if(count >=  minimum_count){
                list.Add(new string[] {i, price, count.ToString()});
            }
        }
    }catch{}
}
string[] result = list.OrderBy(x=>double.Parse(x[1].Replace(".",","))).First();
project.SendInfoToLog($"страна - {result[0]}, цена - {result[1]}, количество - {result[2]}");
return result[0];

Копировал - Вставил в проект как код С#, при выполнении ошибка (
 

TomJhon

Client
Регистрация
03.04.2020
Сообщения
33
Благодарностей
2
Баллы
8
Пример для WA сделал. В "Директивах и общем коде" есть необходимый класс. По аналогии можно сделать и для других каких-то сервисов, думаю..
Если не сможешь переменные из шарпа положить в переменные проекта - сообщи.
Спасибо! Но у меня не открывает, можете в версии 7.7.0.0 выгрузить?
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
  • Спасибо
Реакции: TomJhon

TomJhon

Client
Регистрация
03.04.2020
Сообщения
33
Благодарностей
2
Баллы
8

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)