PDA

Просмотр полной версии : SH5 Web API Выгрузка данных



sin_39
15.04.2019, 18:40
Добрый день! Решили выгрузку данных со SH5 запилить. Пишем на C#. Столкнулись с проблемой парсинга JSON ответов от API. Может кто-то сталкивался или создавал схожие объекты, подскажите как лучше распарсить JSON. Проблема заключается в следующем(процедура GoodsTree(номенклатура)), JSON пример:
{
"head": "111",
"original": [
"1",
"4",
"5",
],
"fields": [
"Rid",
"Guid",
"Options",
],
"values": [
[
6,
0,
1,
[
"{0047B3AB-08B9-1D40-052C-D85868CC4F33}",
"{15DB501E-DBBD-EB79-0E64-225FDBEA848E}",
"{137555FA-DDDF-7AC3-9E61-AD1E0A5402EA}",
],
[
0,
0,
11,
]
]
}
Последний массив по сути содержит данные, но отображаются они не совсем классически для формата JSON, каждый из 3-ех массивов в массиве values, содержит часть данных. После парсинга приходиться перебирать эти массивы что бы получить объект:
for(int x =0; x <Shtable.Count(); x++)
{
Value value=newValue
{
Rid=(long)values[0][x],// 6
Guid=(string)values[1][x],// "{0047B3AB-08B9-1D40-052C-D85868CC4F33}"
Options=(long)values[2][x]// 0
}
}
Может быть есть более правильное решение для парсинга JSON из SH5?

apetrov70
15.04.2019, 22:27
Не стоит закладываться на порядок полей [0],[1],[2]
values[0][x],// 6
values[1][x],// "{0047B3AB-08B9-1D40-052C-D85868CC4F33}"
values[2][x]// 0

Лучше предварительно определить индексы полей по идентификаторам из "original" . А потом уже цикл.

sin_39
16.04.2019, 11:40
apetrov70 спасибо ОГРОМНОЕ, твой совет все расставил на свои места. Собственно реализация:

Dictionary<string, int> dict = new Dictionary<string, int>();
for (int x = 0; x < original.Length; x++) dict.Add(original[x], x);

в дальнейшем в цикле обращаюсь по идентификатору из original
values[dict["1"]][x],// 6
values[dict["4"]][x],// "{0047B3AB-08B9-1D40-052C-D85868CC4F33}"
values[dict["5"]][x]// 0

поля описаны в мануалах по API. https://apidocs.ucs.ru/doku.php/ru:storehouse5:goods