Имя: Пароль:
1C
1С v8
При записи JSON возвращает строку с символами "\r\n\" и др.
,
0 OnePrg
 
23.06.22
12:36
При попытке записать в одно из полей JSON JSON-строку в результирующей строке добавляет какие-то символы

СтруктураPOSТ_Запрос = Новый Структура;
СтруктураPOSТ_Запрос.Вставить("request",СтрокаJSON_Запрос);  <-- нормальная строка JSON запроса (см. ниже)
ЗаписатьJSON(ЗаписьJSON_POSТ_Запрос,СтруктураPOSТ_Запрос);
POSТ_Запрос = ЗаписьJSON_POSТ_Запрос.Закрыть();              <-- в результирующей строке добавляются символы "\r\n\" и др.

{
"client": "49",
"object": "order",
"method": "create",
"parameters": {
"orders": [
{
"product_order": "55555",
"contact": "Иванов",
"tel": "0502224455",
"city": "Глухов",
"adress": "ул.Садовая",
"time": "12:00:00",
"delivery_date": "30.06.2022",
"naimenovanie": "электрика",
"summa_oplaty": "1000.00",
"summa_strahovki": "10.00",
"ves": "2.0",
"mest": "1",
"primechanie": "без примечания",
"id_service": "2",
"id_status": "0",
"TypesOfPayers": "Sender",
"BackwardDelivery": "Recipient"
}
]
}
}

{
"request": "{\r\n\"client\": \"49\",\r\n\"object\": \"order\",\r\n\"method\": \"create\",\r\n\"parameters\": {\r\n\"orders\": [\r\n{\r\n\"product_order\": \"55555\",\r\n\"contact\": \"Иванов\",\r\n\"tel\": \"0502224455\",\r\n\"city\": \"Глухов\",\r\n\"adress\": \"ул.Садовая\",\r\n\"time\": \"12:00:00\",\r\n\"delivery_date\": \"30.06.2022\",\r\n\"naimenovanie\": \"электрика\",\r\n\"summa_oplaty\": \"1000.00\",\r\n\"summa_strahovki\": \"10.00\",\r\n\"ves\": \"2.0\",\r\n\"mest\": \"1\",\r\n\"primechanie\": \"без примечания\",\r\n\"id_service\": \"2\",\r\n\"id_status\": \"0\",\r\n\"TypesOfPayers\": \"Sender\",\r\n\"BackwardDelivery\": \"Recipient\"\r\n}\r\n]\r\n}\r\n}"
}
1 Кир Пластелинин
 
23.06.22
12:45
заэкранировались символы вестимо
2 OnePrg
 
23.06.22
12:57
ЗаписатьJSON(ЗаписьJSON_Запрос,СтруктураЗапроса);
СтрокаJSON_Запрос = СтрЗаменить(ЗаписьJSON_Запрос.Закрыть(),Символы.ПС,"");
СтрокаJSON_Запрос = СтрЗаменить(СтрокаJSON_Запрос,Символы.ВК,"");
СтрокаJSON_Запрос = СтрЗаменить(СтрокаJSON_Запрос,Символы.ВТаб,"");
СтрокаJSON_Запрос = СтрЗаменить(СтрокаJSON_Запрос,Символы.НПП,"");
СтрокаJSON_Запрос = СтрЗаменить(СтрокаJSON_Запрос,Символы.ПФ,"");
СтрокаJSON_Запрос = СтрЗаменить(СтрокаJSON_Запрос,Символы.Таб,"");
    
    
ЗаписьJSON_POSТ_Запрос = Новый ЗаписьJSON;
ЗаписьJSON_POSТ_Запрос.ПроверятьСтруктуру = Ложь;
ЗаписьJSON_POSТ_Запрос.УстановитьСтроку();
    
СтруктураPOSТ_Запрос = Новый Структура;
СтруктураPOSТ_Запрос.Вставить("request",СтрокаJSON_Запрос);
ЗаписатьJSON(ЗаписьJSON_POSТ_Запрос,СтруктураPOSТ_Запрос);
POSТ_Запрос = ЗаписьJSON_POSТ_Запрос.Закрыть();



{"client": "49","object": "order","method": "create","parameters": {"orders": [{"product_order": "55555","contact": "Иванов","tel": "0502224455","city": "Глухов","adress": "ул.Садовая","time": "12:00:00","delivery_date": "30.06.2022","naimenovanie": "электрика","summa_oplaty": "1000.00","summa_strahovki": "10.00","ves": "2.0","mest": "1","primechanie": "без примечания","id_service": "2","id_status": "0","TypesOfPayers": "Sender","BackwardDelivery": "Recipient"}]}}

{
"request": "{\"client\": \"49\",\"object\": \"order\",\"method\": \"create\",\"parameters\": {\"orders\": [{\"product_order\": \"55555\",\"contact\": \"Иванов\",\"tel\": \"0502224455\",\"city\": \"Глухов\",\"adress\": \"ул.Садовая\",\"time\": \"12:00:00\",\"delivery_date\": \"30.06.2022\",\"naimenovanie\": \"электрика\",\"summa_oplaty\": \"1000.00\",\"summa_strahovki\": \"10.00\",\"ves\": \"2.0\",\"mest\": \"1\",\"primechanie\": \"без примечания\",\"id_service\": \"2\",\"id_status\": \"0\",\"TypesOfPayers\": \"Sender\",\"BackwardDelivery\": \"Recipient\"}]}}"
}


Как флеш убрать?
3 dmt
 
23.06.22
13:28
ЗаписатьБезОбработки()
4 arsik
 
гуру
23.06.22
13:45
(0) Ты неправильно json формируешь. Ты в объектjson вставляешь строку и думаешь, что получится json?
Самое простое сделать структуру или массив и ее в json сериализовать. Примерно так:
стр = Новый Структура("client,object,method,parameters",
    "49",
    "order"
    "create",
    Новый Структура("orders", Новый Массив));
    
стр.parameters.Добавить(Новый Структура("product_order,contact","55555","Иванов"));

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, стр);
ТекстЗапроса = ЗаписьJSON.Закрыть();
5 arsik
 
гуру
23.06.22
13:47
Ошибочка
неправильно - стр.parameters.Добавить(Новый Структура("product_order,contact","55555","Иванов"));
правильно  - стр.parameters.orders.Добавить(Новый Структура("product_order,contact","55555","Иванов"));
6 arsik
 
гуру
23.06.22
13:53
+(5) еще ошибка есть.
Вот так правильно:
стр = Новый Структура("client,object,method,parameters","49","order","create", Новый Структура("orders", Новый Массив));
стр.parameters.orders.Добавить(Новый Структура("product_order,contact","55555","Иванов"));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, стр);
ТекстЗапроса = ЗаписьJSON.Закрыть();
7 arsik
 
гуру
23.06.22
13:57
+(6) :)
стр = Новый Структура("request");
стр.request = Новый Структура("client,object,method,parameters","49","order","create", Новый Структура("orders", Новый Массив));
стр.request.parameters.orders.Добавить(Новый Структура("product_order,contact","55555","Иванов"));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, стр);
ТекстЗапроса = ЗаписьJSON.Закрыть();
8 dmt
 
23.06.22
14:18
(7) Телепатирую, что у ТС уже есть строка жсон, так что придется ему либо использовать ЗаписатьБезОбработки, либо сначала десериализовать свою строку в структуру, затем вставить ее в структуру-владельца и только потом сериализовать в итоговый жсон
9 OnePrg
 
23.06.22
14:19
(3) не нахожу такого метода у JSON
10 arsik
 
гуру
23.06.22
14:25
(8) Нету у него. Он как раз собирает ее для ответа. Но добавляет объект request как строку.
11 dmt
 
23.06.22
14:26
(9)
ЗаписьJSON (JSONWriter)
ЗаписатьБезОбработки (WriteRaw)
Синтаксис:

ЗаписатьБезОбработки(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Строка, записываемая в документ JSON.
Описание:

Выполняет запись произвольной строки в документ, при этом проверка структуры документа не выполняется.
Если при использовании метода свойство ПроверятьСтруктуру установлено в значение Истина, то проверка структуры продолжается на следующем элементе.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

ЗаписьJSON = Новый ЗаписьJSON;
// Запись документа JSON

ЗаписьJSON.ЗаписатьБезОбработки("Просто строка");
12 OnePrg
 
23.06.22
14:33
(7) Спасибище, друг - то, что нужно.

Всем спасибо.
13 OnePrg
 
23.06.22
14:37
стоп, стоп, стоп ....
с символами разобрались
НО!

"в параметр rtequest должна быть передана строка, не объект JSON"

как это выполнить?
14 arsik
 
гуру
23.06.22
15:01
(13) Возможно ты что то не понимаешь в сервисе. Покажи, пример, что должно быть в итоге. Лучше не свое, а из мануала, того, по которому делаешь.
15 arsik
 
гуру
23.06.22
15:05
(13) Если ты все же хочешь передавать строку, то подумай, как на той стороне поймут как распарсить эту строку без символов экранирования?
16 Кир Пластелинин
 
23.06.22
15:15
(13) скорей всего в заголовках указать соответствующий content type
17 OnePrg
 
23.06.22
15:18
(14)

const requestData = {
    client: '123',
    object: 'order',
    method: 'create',
    parameters: {
        orders: [
        product-order: '12345',
        contact: 'recipient пане',
        tel: '+380441234567',
        city: 'kiev',
        adress: 'some address',
        time: 'delivery time',
        delivery-date: '01.02.2018',
        naimenovanie: 'some description',
        summa_oplaty: 200,
        summa_strahovki: 200,
        ves: 2.5,
        mest: 1,
        primechanie : 'some note',
        id.service: 1,
        id-status: 1,
        nomenklatura: [
            {id: 15, amount: З},
            {id: 123, amount: 1}
                      ]
                
                ]
                };
                
const params = new FormDataO;
const requestDataJSON = JSON.stringify(requestData);

params.append('request', requestDataJSON); //в параметре request должна быть строка (не объект) в виде JSON
params.append('sign', 'concatenated requestDataJSON with key and encoded in MD5');
request.send(params);
18 arsik
 
гуру
23.06.22
15:24
Ну попробуй вот так
стр = Новый Структура("client,object,method,parameters","49","order","create", Новый Структура("orders", Новый Массив));
стр.parameters.orders.Добавить(Новый Структура("product_order,contact","55555","Иванов"));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,Ложь,ЭкранированиеСимволовJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, стр);
ТекстЗапроса = ЗаписьJSON.Закрыть();

стр = Новый Структура("request");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
стр = Новый Структура("request",ТекстЗапроса);
ЗаписатьJSON(ЗаписьJSON, стр);
ТекстЗапроса = ЗаписьJSON.Закрыть();
19 OnePrg
 
23.06.22
15:26
Структура = Новый Структура("client,object,method,parameters","49","order","create", Новый Структура("orders", Новый Массив));

    СтруктураЗаказа = Новый Структура;
    СтруктураЗаказа.Вставить("product_order","55555");             //(required) – номер заказа
    СтруктураЗаказа.Вставить("contact","Иванов");                 //(required)  – фио получателя

...

    Структура.parameters.orders.Добавить(СтруктураЗаказа);    
                                                                
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Структура);
    Строка_request = ЗаписьJSON.Закрыть();                                                                
                                                                
    //nomenklatura – массив подвязанной номенклатуры:
    //    id – id номенклатуры
    //    amount – количество в заказе по номенклатуре
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    ЗаписьJSON.УстановитьСтроку();
    СтруктураГлавная = Новый Структура;
    СтруктураГлавная.Вставить("request",Строка_request);    
    ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
    ХешированиеДанных.Добавить(Строка_request+api_ключ);
    СтруктураГлавная.Вставить("sign",СтрЗаменить(НРег(СокрЛП(ХешированиеДанных.ХешСумма))," ",""));    
    ЗаписатьJSON(ЗаписьJSON, СтруктураГлавная);
    POSТ_Запрос_Строка = ЗаписьJSON.Закрыть();                                                                



{
"request": "{\r\n\"client\": \"49\",\r\n\"object\": \"order\",\r\n\"method\": \"create\",\r\n\"parameters\": {\r\n\"orders\": [\r\n{\r\n\"product_order\": \"55555\",\r\n\"contact\": \"Иванов\",\r\n\"tel\": \"0502224455\",\r\n\"city\": \"Глухов\",\r\n\"adress\": \"ул.Садовая\",\r\n\"time\": \"12:00:00\",\r\n\"delivery_date\": \"30.06.2022\",\r\n\"naimenovanie\": \"электрика\",\r\n\"summa_oplaty\": \"1000.00\",\r\n\"summa_strahovki\": \"10.00\",\r\n\"ves\": \"2.0\",\r\n\"mest\": \"1\",\r\n\"primechanie\": \"без примечания\",\r\n\"id_service\": \"2\",\r\n\"id_status\": \"0\",\r\n\"TypesOfPayers\": \"Sender\",\r\n\"BackwardDelivery\": \"Recipient\"\r\n}\r\n]\r\n}\r\n}",
"sign": "b139773............."
}