Имя: Пароль:
1C
 
Сортировка в соответствии перед конвертацией в JSON
0 fantomrik
 
17.01.18
11:01
Коллеги, бодрого дня!

Занимаюсь интеграцией 1С и сайта, необходимо формировать POST запросы в JSON.
В виду того, что ключи в теле запроса могут содержать символ "-", использовать Структуру не получится, использую Соответствие.

После формирования вложенных структур через соответствия и массивы, перевожу их в JSON типовым функционалом:

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МоеСоответствиеСвойств);
СтрокаJSON = ЗаписьJSON.Закрыть();

В чем загвоздка - последовательность ключей в Соответствии произвольное (не зависимо в каком порядке я вставлял их) и соответственно последовательность ключей JSON такая же как в Соответствии.

Можно на это как то повлиять или только итоговый JSON парсить как текст и менять последовательность?

Пример типового формирования и формата в котором сайт не "съедает" тело запроса
{
    "event-date": "2018-01-17T10:05:53.0690000Z",
    "origin-id": "XMVTvxVmakeUgS8kZvj1mg==",
    "properties": {
        "account-id": "3c9a05bb-d2cf-11e0-b681-0030485579bb",
        "permissions": [
            {
                "begin-date": "2018-01-16T12:00:00.0800000Z",
                "end-date": "2018-01-23T12:00:00.0800000Z",
                "permission-code": "8",
                "flag": 1
            },
            {
                "begin-date": "2018-01-16T12:00:00.0800000Z",
                "end-date": "2018-01-23T12:00:00.0800000Z",
                "description": "20",
                "permission-code": "8.1",
                "flag": 1
            },
            {
                "begin-date": "2018-01-16T12:00:00.0800000Z",
                "end-date": "2018-01-23T12:00:00.0800000Z",
                "permission-code": "1",
                "flag": 1
            }
        ]
    },
    "event-type": "post-xxxxxx",
    "event-id": "XMVTvxVmakeUgS8kZvj1mg=="
}

а в таком уже все ок

{
  "event-type": "post-xxxxxx",
  "event-date": "2018-01-16T08:37:41.2600000Z",
  "event-id": "XMVTvxVmakeUgS8kZvj1mg==",
  "origin-id": "XMVTvxVmakeUgS8kZvj1mg==",
  "properties": {
    "account-id": "3c9a05bb-d2cf-11e0-b681-0030485579bb",
    "permissions": [
      {
        "permission-code": "8",
        "begin-date": "2018-01-15T13:20:16.7960000Z",
        "end-date": "2018-01-15T13:20:16.7960000Z",
        "flag": 1
      },
      {
        "permission-code": "8.1",
        "begin-date": "2018-01-15T13:20:16.7960000Z",
        "end-date": "2018-01-15T13:20:16.7960000Z",
        "flag": 1,
        "description": "20"
      },
      {
        "permission-code": "1",
        "begin-date": "2018-01-15T13:20:16.7960000Z",
        "end-date": "2018-01-15T13:20:16.7960000Z",
        "flag": 1
      }
    ]
  }
}
1 fantomrik
 
17.01.18
11:14
Наверно все таки вручную только парсер/переформирователь итогового текста JSON писать нужно.
2 бомболюк
 
17.01.18
11:20
проще использовать коллекции которые сохраняют порядок например список значений или массив
3 fantomrik
 
17.01.18
11:25
(2) Список значений не подойдет в ввиду ограничения типов в ЗаписатьJSON (WriteJSON). А с массивом мысль, сейчас попробую!
4 fantomrik
 
17.01.18
11:37
(3) Попробовал за основу взять массив. На первом уровне в массив добавлять соответствие (нам нужен ключ и значение), на втором еще один массив в котором так же соответствия. Ниже проваливаться не стал, посмотрел с 2мя уровнями - уже вроде как неверно формирует

[
    {
        "event-type": "post-XXXXXXX"
    },
    {
        "event-date": "2018-01-17T11:30:17.4600000Z"
    },
    {
        "event-id": "XMVTvxVmakeUgS8kZvj1mg=="
    },
    {
        "origin-id": "XMVTvxVmakeUgS8kZvj1mg=="
    },
    [
        {
            "account-id": "3c9a05bb-d2cf-11e0-b681-0030485579bb"
        },
        {
            "permissions": "--------------"
        }
    ]
]