|
Запись в JSON | ☑ | ||
---|---|---|---|---|
0
antihacker
11.03.19
✎
15:29
|
Всем привет !
Ни как не могу записать JSON в таком формате [{"Header":11111,"0":[{"id":"***"},{"id":"***"}]},{"Header":22222,"0":[{"id":"***"},{"id":"***"}]},{"Header":11111,"0":[{"id":"-----"},{"id":"-----"}]},{"Header":22222,"0":[{"id":"-----"},{"id":"-----"}]}] Подскажите люди добрые. |
|||
1
Ёпрст
11.03.19
✎
15:31
|
(0) ошибка в 24 строке
|
|||
2
antihacker
11.03.19
✎
15:32
|
Вот мой код
Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); Запись.ЗаписатьНачалоМассива(); //Отбор = Новый Структура; //Отбор.Вставить("ЭтоГруппа",ЛОжь); //СписокНоменклатур = Справочники.Номенклатура.Выбрать(); Для Каждого ТекНоменклатура Из Объект.ТЧСписокНоменклатур Цикл Запись.ЗаписатьНачалоОбъекта(); Запись.ЗаписатьИмяСвойства("nom_id"); Запись.ЗаписатьЗначение(Число(ТекНоменклатура.КодСистемыОР)); Запись.ЗаписатьИмяСвойства("id_from_client"); Запись.ЗаписатьЗначение(СокрЛП(ТекНоменклатура.КодНоменклатуры)); Запись.ЗаписатьИмяСвойства("nomenclature_name_from_OR"); Запись.ЗаписатьЗначение(СокрЛП(ТекНоменклатура.ИмяНоменклатурыИзОР)); Запись.ЗаписатьИмяСвойства("nomenclature_name"); Запись.ЗаписатьЗначение(СокрЛП(ТекНоменклатура.Номенклатура.Наименование)); Запись.ЗаписатьИмяСвойства("unit"); Запись.ЗаписатьЗначение(СокрЛП(ТекНоменклатура.ЕИ)); Запись.ЗаписатьИмяСвойства("nomenclature_price"); Запись.ЗаписатьЗначение(Число(ТекНоменклатура.Цена)); Запись.ЗаписатьКонецОбъекта(); КонецЦикла; Запись.ЗаписатьКонецМассива(); strJSON = Запись.Закрыть(); Возврат strJSON; |
|||
3
Ёпрст
11.03.19
✎
15:41
|
(0)
ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ЗаписьJSON.УстановитьСтроку(); ЗаписьJSON.ЗаписатьНачалоМассива(); Структура = Новый Структура; Структура.Вставить("Header",11111); МассивПараметров = Новый Массив; СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("id",1); МассивПараметров.Добавить(СтруктураПараметров); СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("id",2); МассивПараметров.Добавить(СтруктураПараметров); Структура.Вставить("O",МассивПараметров); ЗаписатьJSON(ЗаписьJSON,Структура); ЗаписьJSON.ЗаписатьКонецМассива(); Сообщиь(ЗаписьJSON.Закрыть()); |
|||
4
Ёпрст
11.03.19
✎
15:41
|
надеюсь, разберешься..
|
|||
5
polosov
11.03.19
✎
15:42
|
(0) Ключи в виде цифр не поддерживаются в 1с. Формируй текст сам.
|
|||
6
Ёпрст
11.03.19
✎
15:46
|
(5) это ограничение обходится, путём стрЗаменить на выходе
|
|||
7
Ёпрст
11.03.19
✎
15:47
|
и.. автор видать просто не знает, как вложенные массивы json делать, об этом его вопрос был
|
|||
8
antihacker
12.03.19
✎
07:10
|
Нет я знаю конечно. Вот пример - http://v8.1c.ru/o7/201410json/index.htm
Но не дает мне нужный формат. |
|||
9
antihacker
12.03.19
✎
09:31
|
Вот в таком формате нужен
[{"Header":"АБП1","1":[{"id":"Оплата труда"},{"id":"2000"}]},{"Header":"АБП2","2":[{"id":"Оплата труда"},{"id":"4000"}]},{"Header":"АБП3","3":[{"id":"Оплата труда"},{"id":"6000"}]},{"Header":"АБП4","4":[{"id":"Оплата труда"},{"id":"8000"}]}] |
|||
10
antihacker
12.03.19
✎
10:07
|
Или же как можно прочесть на PHP такую строку
[{"Header":"ABP","id":["Оплата труда","2000","2500"]},{"Header":"АБП2","id":["Оплата труда","2000","2500"]}] |
|||
11
Ёпрст
12.03.19
✎
10:09
|
(9) И ? см.(3)
|
|||
12
Ёпрст
12.03.19
✎
10:15
|
И если че, в (9) и (10) разные массивы. Тебе что в итоге нннадо ?
|
|||
13
antihacker
12.03.19
✎
10:22
|
Вот это - [{"Header":"ABP","id1":["Gplata trusa","2000","5500"]},{"Header":"АБП2","id":["Оплата труда","2000","2500"]}]
Читаю вот так foreach ($decoded as $person_name => $person_a) { echo $person_a['Header']; echo "="; foreach ($person_a as $person_name1 => $person_a1) { foreach ($person_a1 as $person_name2 => $person_a2) { echo $person_a2['id']; echo ","; } } echo "|*|"; //echo $person_a['Header']; } Результат ABP=G,2,5,|*|АБП2=�,2,2,|*|ABP=G,2,5,|*|АБП2=�,2,2,|*| Почему то берет только первые символы |
|||
14
Ёпрст
12.03.19
✎
10:24
|
Если не знаешь, как правильно "собрать" json в 1с-ине, делай обратную операцию: то что в (9) или в (10) кидаешь в в файлик вася.json, ну и дальше смотришь в отладчике МассивJSON:
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.ОткрытьФайл("f:\вася.json"); МассивJSON= ПрочитатьJSON(ЧтениеJSON); |
|||
15
Asmody
12.03.19
✎
10:26
|
(13) в твоем php украли json_decode()?
|
|||
16
antihacker
12.03.19
✎
10:27
|
Нее он в начале есть конечно
$decoded = json_decode(($_GET['param']), true); |
|||
17
Asmody
12.03.19
✎
10:36
|
Возможно, у тебя на стороне php с кодировками беда.
|
|||
18
antihacker
12.03.19
✎
10:47
|
Да нет. Вот есть
<?php header("Content-Type: text/html; charset=utf-8"); |
|||
19
Ёпрст
12.03.19
✎
10:54
|
(18) это, тебе надо получить от твоего сервера json или послать туда ? Или и то и то ? И...проблема то у тебя где ? В 1с-ине не можешь прочитать/создать? Или на стороне сервера?
|
|||
20
Ёпрст
12.03.19
✎
10:55
|
а то в (0) пишешь про 1с, в (13) про php
|
|||
21
antihacker
12.03.19
✎
11:24
|
Мне надо принять такой джисон
[{"Header":"АБП1","1":[{"id":"Оплата труда"},{"id":"2000"},{"id":"2500"}]},{"Header":"АБП2","2":[{"id":"Оплата труда"},{"id":"4000"}]},{"Header":"АБП3","3":[{"id":"Оплата труда"},{"id":"6000"}]},{"Header":"АБП4","4":[{"id":"Оплата труда"},{"id":"8000"}]}] Но в 1с получается только [{"Header": "АБП","id": ["1","2"]}] Разницу видите ? |
|||
22
Ёпрст
12.03.19
✎
11:28
|
(21) биомать а ? принять где ? в 1с или на твоём сервисе ?
|
|||
23
antihacker
12.03.19
✎
11:29
|
на сервисе PHP
|
|||
24
Ёпрст
12.03.19
✎
11:30
|
и проблема твоя в чем ? не можешь создать json нужной структуры или прочитать его ?
|
|||
25
Ёпрст
12.03.19
✎
11:31
|
(23) т.е твоя проблема, что в 1с-ине не можешь создать json нужной структуры или что ?
или на сервисе PHP не можешь прочитать json ? |
|||
26
antihacker
12.03.19
✎
11:35
|
Не могу в 1С создать [{"Header":"АБП1","1":[{"id":"Оплата труда"},{"id":"2000"},{"id":"2500"}]},{"Header":"АБП2","2":[{"id":"Оплата труда"},{"id":"4000"}]},{"Header":"АБП3","3":[{"id":"Оплата труда"},{"id":"6000"}]},{"Header":"АБП4","4":[{"id":"Оплата труда"},{"id":"8000"}]}]
|
|||
27
Вафель
12.03.19
✎
11:38
|
а если соответствие вместо структуры?
|
|||
28
antihacker
12.03.19
✎
11:42
|
Вафель, не хочу усложнять
|
|||
29
Fragster
гуру
12.03.19
✎
11:42
|
(27) а там порядок полей кривой
|
|||
30
Вафель
12.03.19
✎
11:43
|
а что нужен порядок полей? это же жисон
|
|||
31
Fragster
гуру
12.03.19
✎
11:44
|
Соответствие = Новый Соответствие();
Соответствие.Вставить("Header", "1234"); Массив = Новый Массив(); СоответствиеМассив = Новый Соответствие(); СоответствиеМассив.Вставить("id", "Оплата труда"); Массив.Добавить(СоответствиеМассив); СоответствиеМассив = Новый Соответствие(); СоответствиеМассив.Вставить("id", 2000); Массив.Добавить(СоответствиеМассив); СоответствиеМассив = Новый Соответствие(); СоответствиеМассив.Вставить("id", 2500); Массив.Добавить(СоответствиеМассив); Соответствие.Вставить("1", Массив); Соответствие.Вставить("2", Массив); МассивОбщий = Новый Массив(); МассивОбщий.Добавить(Соответствие); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); ЗаписатьJSON(Запись, МассивОбщий); Результат = Запись.Закрыть(); (30) видимо, на той стороне такой же, как и на этой. А вообще гляжу на струкуту этого json и вижу, что сочинял её третий такой же. Ну не логичная она ни разу. |
|||
32
Fragster
гуру
12.03.19
✎
11:45
|
* такой же программист, как и на этой.
|
|||
33
antihacker
12.03.19
✎
11:46
|
Пример от сюда взял
http://v8.1c.ru/o7/201410json/index.htm |
|||
34
Ёпрст
12.03.19
✎
11:48
|
(26) На вот, развлекайся
|
|||
35
Ёпрст
12.03.19
✎
11:50
|
(31) блин, про соответствие забыл, ну да..так проще, не надо морочиться с ключами - цифрами.
|
|||
36
antihacker
12.03.19
✎
11:52
|
Вот именно по задаче ключи не имеют значения, так в массивах есть уникальные данные. На них и будем ориентироваться.
|
|||
37
Вафель
12.03.19
✎
11:53
|
если ключи не важны, то пиши например ключ "ТЧ"
|
|||
38
Garykom
гуру
12.03.19
✎
11:54
|
(26) У тя json кривой и не валидный, поэтому и не получается
|
|||
39
Fragster
гуру
12.03.19
✎
11:54
|
(38)да не, валидный. но структуру придумывал победитель специальной олимпиады
|
|||
40
Вафель
12.03.19
✎
11:55
|
вполне валидный
dgjkyt dfk |
|||
41
Вафель
12.03.19
✎
11:55
|
||||
42
Ёпрст
12.03.19
✎
11:55
|
|
|||
43
Fragster
гуру
12.03.19
✎
11:55
|
чтобы неудобно было и отправителю и получателю
|
|||
44
Garykom
гуру
12.03.19
✎
11:57
|
(41) Форматтер ничего не проверяет а просто пытается отформатировать и у меня вышла хрень
|
|||
45
Вафель
12.03.19
✎
11:58
|
(44) там есть кнопка валидировать
|
|||
46
Ёпрст
12.03.19
✎
12:02
|
Можно еще JSToll в np++
|
|||
47
Garykom
гуру
12.03.19
✎
12:03
|
(45) Понял меня сбили одинаковые "id" но оно же в объекты обернуто внутри массива
|
|||
48
antihacker
20.03.19
✎
10:42
|
Вот результат
[ { "1": [ { "id": "Оплата труда" }, { "id": "2000" }, { "id": "3000" } ], "Header": "АБП1" }, { "1": [ { "id": "Оплата труда" }, { "id": "2000" }, { "id": "3000" } ], "Header": "АБП2", "2": [ { "id": "Еще какая хрень" }, { "id": "1000" } ] }, { "1": [ { "id": "Оплата труда" }, { "id": "2000" }, { "id": "3000" } ], "Header": "АБП3", "2": [ { "id": "Еще какая хрень" }, { "id": "1000" } ], "3": [ { "id": "От ведь как" }, { "id": "6000" }, { "id": "8000" }, { "id": "9000" } ] } ] не могу понять почему "Header": "АБП1" падает в конец ? |
|||
49
Вафель
20.03.19
✎
10:43
|
так тебе еще и порядок реквизитов нужен?
|
|||
50
antihacker
20.03.19
✎
10:45
|
Ну конечно
|
|||
51
Вафель
20.03.19
✎
10:46
|
(50) ну тогда только по тегово записывать через ЗаписьXML
|
|||
52
antihacker
20.03.19
✎
10:46
|
Там даже не в порядке, а в формате. Почему то первы массив "Header": "АБП1" имепет не правильный формат
|
|||
53
Вафель
20.03.19
✎
10:46
|
*ЗаписьJSON
|
|||
54
antihacker
22.03.19
✎
09:40
|
Вафель, что это означает ? *ЗаписьJSON ?
|
|||
55
antihacker
22.03.19
✎
09:45
|
Вот код
ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ЗаписьJSON.УстановитьСтроку(); ЗаписьJSON.ЗаписатьНачалоМассива(); Соответствие = Новый Соответствие; Соответствие.Вставить("Header","АБП"); //ЗаписатьJSON(ЗаписьJSON,Соответствие); МассивПараметров = Новый Массив; СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","Оплата труда"); МассивПараметров.Добавить(СоответствиеПараметров); СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","2000"); МассивПараметров.Добавить(СоответствиеПараметров); СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","3000"); МассивПараметров.Добавить(СоответствиеПараметров); Соответствие.Вставить("1",МассивПараметров); //ЗаписатьJSON(ЗаписьJSON,Соответствие); МассивПараметров = Новый Массив; СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","Оплата труда2222"); МассивПараметров.Добавить(СоответствиеПараметров); СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","22000"); МассивПараметров.Добавить(СоответствиеПараметров); СоответствиеПараметров = Новый Соответствие; СоответствиеПараметров.Вставить("id","333000"); МассивПараметров.Добавить(СоответствиеПараметров); Соответствие.Вставить("2",МассивПараметров); ЗаписатьJSON(ЗаписьJSON,Соответствие); Вот результат [ { "1": [ { "id": "Оплата труда" }, { "id": "2000" }, { "id": "3000" } ], "Header": "АБП", "2": [ { "id": "Оплата труда2222" }, { "id": "22000" }, { "id": "333000" } ] } ] |
|||
56
Ёпрст
22.03.19
✎
09:51
|
Это же очевидно. Пропущена строка новый соответствие и запись
Json |
|||
57
antihacker
22.03.19
✎
09:53
|
Ты про закомпостированные строчки ?
|
|||
58
antihacker
22.03.19
✎
09:53
|
закоментированные строчки ?
|
|||
59
novichok79
22.03.19
✎
09:58
|
типа 1С так не может, да?
Функция СериализоватьВJSON(Объект) Экспорт ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); Попытка ЗаписатьJSON(ЗаписьJSON, Объект); ТелоJSON = ЗаписьJSON.Закрыть(); Исключение ТелоJSON = ""; КонецПопытки; Возврат ТелоJSON; КонецФункции АррайГлавный = Новый Массив; АррайЁпт = Новый Массив; Для Счетчик = 1 По 3 Цикл HashMAP = Новый Соответствие; HashMAP.Вставить("id", "sick_my_duck" + Формат(Счетчик, "ЧН=;ЧГ=0")); АррайЁпт.Добавить(HashMAP); КонецЦикла ВнешняяХрень = Новый Соответствие; ВнешняяХрень.Вставить("Header", 11111); ВнешняяХрень.Вставить("0", АррайЁпт); АррайГлавный.Добавить(ВнешняяХрень); АррайГлавный.Добавить(ВнешняяХрень); АррайГлавный.Добавить(ВнешняяХрень); JSON = СериализоватьJSON(АррайГлавный); |
|||
60
novichok79
22.03.19
✎
10:04
|
так у тебя "id" - значения соответствия, они повторяются.
делай тогда "id1", "id2", а потом стрзаменить в конце. |
|||
61
antihacker
22.03.19
✎
10:07
|
Они и должны поворотятся.
|
|||
62
novichok79
22.03.19
✎
10:16
|
&НаСервере
Функция СериализоватьВJSON(Объект) ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); Попытка ЗаписатьJSON(ЗаписьJSON, Объект); ТелоJSON = ЗаписьJSON.Закрыть(); Исключение ТелоJSON = ""; КонецПопытки; Возврат ТелоJSON; КонецФункции &НаСервере Функция ЕбалаНаСервере() АБП = Новый Соответствие; АБП.Вставить("АБП1", "1"); АБП.Вставить("АБП2", "2"); АБП.Вставить("АБП3", "3"); АБП.Вставить("АБП4", "4"); АБПОплата = Новый Соответствие; АБПОплата.Вставить("АБП1", "2000"); АБПОплата.Вставить("АБП2", "4000"); АБПОплата.Вставить("АБП3", "6000"); АБПОплата.Вставить("АБП4", "8000"); Перечисление = Новый Массив; Для Каждого КлючЗначение Из АБП Цикл Header = КлючЗначение.Ключ; Value = КлючЗначение.Значение; Amount = АБПОплата.Получить(Header); Времяночка = Новый Соответствие; Времяночка.Вставить("id", "Оплата труда"); Времяночка1 = Новый Соответствие; Времяночка1.Вставить("id", Amount); ПеречислениеВнутр = Новый Массив; ПеречислениеВнутр.Добавить(Времяночка); ПеречислениеВнутр.Добавить(Времяночка1); КонтейнерМусора = Новый Соответствие; КонтейнерМусора.Вставить("Header", Header); КонтейнерМусора.Вставить(Value, ПеречислениеВнутр); Перечисление.Добавить(КонтейнерМусора); КонецЦикла; Ебала = СериализоватьВJSON(Перечисление); Возврат Ебала; КонецФункции |
|||
63
novichok79
22.03.19
✎
10:16
|
[{"2":[{"id":"Оплата труда"},{"id":"4000"}],"Header":"АБП2"},{"3":[{"id":"Оплата труда"},{"id":"6000"}],"Header":"АБП3"},{"4":[{"id":"Оплата труда"},{"id":"8000"}],"Header":"АБП4"},{"1":[{"id":"Оплата труда"},{"id":"2000"}],"Header":"АБП1"}]
|
|||
64
novichok79
22.03.19
✎
10:19
|
ну если порядок нужен, то только через ЗаписьJSON или вручную сериализовать, структура у тебя текстовая вообще ненапряжно.
|
|||
65
Ёпрст
22.03.19
✎
10:49
|
(54) под каждый элемент массива нужно новое соответствие и его запись в json
|
|||
66
antihacker
22.03.19
✎
13:00
|
Нее мне нужен такой порядок
[{"Header":"АБП","0":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"Оплата труда"},{"id":"3"},{"id":"4"}]}] |
|||
67
antihacker
22.03.19
✎
13:02
|
ОЙ СОРИИИ.
Такой [{"Header":"АБП","0":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}],"1":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}]}] |
|||
68
antihacker
22.03.19
✎
13:05
|
Если полностью то так
[{"Header":"АБП","0":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}],"1":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}]},{"Header":"АБП1","0":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}],"1":[{"id":"Оплата труда"},{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}]}] |
|||
69
Сияющий в темноте
22.03.19
✎
13:14
|
Можно через запись текста собрать вручную,а для хранения с порядком использовать массивы-первый элемент имя поля,следующий-значение.
|
|||
70
antihacker
22.03.19
✎
14:28
|
сОБИРАТЬ json В РУЧНУЮ , как то колхозно.
|
|||
71
Ёпрст
22.03.19
✎
15:10
|
От ты нудный
|
|||
72
Сияющий в темноте
22.03.19
✎
17:46
|
70 иногдп очень полезно,особенно,если не совсем json.
можно даты писать в одинарных кавычках. не забываем,что javascript кушает строки в одинарных кавычках на ура,но в стандарте этого нет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |