|
Получить значения из JSON | ☑ | ||
---|---|---|---|---|
0
never_be
13.05.14
✎
08:44
|
Есть такой JSON
[ { "Цена" : "183", "Наименование" : "STEP Пазл 1000 Гаваи. Остров Оаху", "Количество" : "1", "Артикул" : "79078" }, { "Цена" : "183", "Наименование" : "STEP Пазл 1000 Гаваи. Остров Оаху", "Количество" : "1", "Артикул" : "79078" } ] Хочу пройтись по нему циклом и забрать значения Вижу такой код как пример СтрокаJSON = "{""server"":""10234"",""user"":""3745"",""hash"":""8263ad83ce""}"; Результат = ЗаполнитьСтруктуруИзJSON(СтрокаJSON); Но в результат будет структура с каким-то 1 значением или я что-то не понял, как по нему циклом пройтись ? |
|||
1
never_be
13.05.14
✎
08:49
|
Или просто
Для каждого тек из Результат Цикл КонецЦикла; ? |
|||
2
Лодырь
13.05.14
✎
08:53
|
Дружище ну открой ты для себя отладчик, если лень читать код процедуры.
|
|||
3
Apokalipsec
13.05.14
✎
08:55
|
(1) а зайти в функцию слабо? Там строку разбирают по регулярным выражениям и возвращают тебе структуру вида:
"server" "10234" "user" "3745" |
|||
4
never_be
13.05.14
✎
08:57
|
(2) (3) Просто пишу в web сервисе, а как его отлаживать еще не разобрался.
|
|||
5
Лодырь
13.05.14
✎
08:59
|
Установи в настройках автоматическое подключение отладчика и все.
|
|||
6
Apokalipsec
13.05.14
✎
08:59
|
(4) Отлаживать через Администрирование публикация там галочка разрешить отладку веб-сервиса
|
|||
7
never_be
13.05.14
✎
10:33
|
Ребята вот так (1) не получается, тек.Цена и прочее вываливает ошибку, как правильно пройтись по структуре которую я получил методом ЗаполнитьСтруктуруИзJSON?
|
|||
8
Apokalipsec
13.05.14
✎
10:37
|
(7) Отладка.Структура не обходится циклом.
Результат.Цена - будет содержать значение. Результат.Наименование - будет содержать наименование. |
|||
9
never_be
13.05.14
✎
10:50
|
(8) Так у меня внутри много значений, как мне их получить, или оно возвращает только первый, что-то я совсем запутался.
|
|||
10
never_be
13.05.14
✎
10:53
|
Например Цена у меня в JSON 10 штук в примере выше 2, как мне до них добраться ?
|
|||
11
Леша1с
13.05.14
✎
10:54
|
(8)>>Отладка.Структура
это что есть такое? (9)"как мне их получить" получить элемент структуры по ключу? |
|||
12
Эмбеддер
13.05.14
✎
10:55
|
а в примере (0) только 1 элемент СтрокаJSON = "{""server"":""10234"",""user"":""3745"",""hash"":""8263ad83ce""}"
|
|||
13
never_be
13.05.14
✎
10:57
|
(11) (12) Ребята в примере (0) 2 номенклатуры, каким методом мне их распарсить и получить значение каждого по очереди ?
|
|||
14
never_be
13.05.14
✎
10:57
|
вот такой
[ { "Цена" : "183", "Наименование" : "STEP Пазл 1000 Гаваи. Остров Оаху", "Количество" : "1", "Артикул" : "79078" }, { "Цена" : "183", "Наименование" : "STEP Пазл 1000 Гаваи. Остров Оаху", "Количество" : "1", "Артикул" : "79078" } ] |
|||
15
Лодырь
13.05.14
✎
10:58
|
Дружище, мы не знаем как устроена твоя функция
ЗаполнитьСтруктуруИзJSON(СтрокаJSON); Если бы речь шла о знакомых нам функциях, дело бы пошло легче. |
|||
16
Enders
13.05.14
✎
10:59
|
(13) написать свой парсер с блекджеком и...
Скачать готовый, примеров масса) Судя по всему ты уже скачал, но как работает - не знаешь, а код не показываешь. Каких ответов ждем?) |
|||
17
never_be
13.05.14
✎
11:01
|
(15) (16) В инете такой код везде его и использовал
Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач ТекстJSON) Экспорт Результат = Новый Структура; ТекстJSON = СтрЗаменить(ТекстJSON, "\""", """"); // заменим последовательность \" на " ТекстJSON = СтрЗаменить(ТекстJSON, """", ""); // а теперь удалим все кавычки Если Лев(ТекстJSON, 1) = "{" Тогда // начало структуры ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда // начало массива МассивДанных = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(МассивДанных, ТекстJSON, "Массив"); Результат.Вставить("Значение", МассивДанных); КонецЕсли; Возврат Результат; КонецФункции Процедура ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, ТипДанных) ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); // удалим открывающий символ структуры(массива) НомерЗначения = 0; Пока ТекстJSON <> "" Цикл ПервыйСимвол = Лев(ТекстJSON, 1); Если ПервыйСимвол = "{" Тогда // вложенная структура Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; ИначеЕсли ТипДанных = "Массив" Тогда Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "[" Тогда // вложенный массив Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; Иначе Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Структура" Тогда // структура закончилась ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; ИначеЕсли ПервыйСимвол = "]" И ТипДанных = "Массив" Тогда // массив закончился ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; Иначе Если ТипДанных = "Структура" Тогда //ПервыйКавычка = Ложь; //Если Лев(ТекстJSON, 1) = """" Тогда // ПервыйКавычка = Истина; //КонецЕсли; Поз = Найти(ТекстJSON, ":"); Если Поз = 0 Тогда // неверный формат, прервемся Прервать; КонецЕсли; //ПредпоследнийКавычка = Ложь; //Если Сред(ТекстJSON, Поз - 1, 1) = """" Тогда // ПредпоследнийКавычка = Истина; //КонецЕсли; ИмяЗначения = СокрЛП(Лев(ТекстJSON, Поз - 1)); ИмяЗначения = СтрЗаменить(ИмяЗначения, """", ""); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз+1)); Если Лев(ТекстJSON, 1) = "{" Тогда // значение является структурой Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда // значение является массивом Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Иначе // обычное значение ПервыйКавычка = Ложь; ПредпоследнийКавычка = Ложь; Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = """" Тогда Если ПервыйКавычка Тогда ПредпоследнийКавычка = Истина; Иначе ПервыйКавычка = Истина; КонецЕсли; КонецЕсли; Если (Символ = "," И ((ПервыйКавычка И ПредпоследнийКавычка) Или (Не ПервыйКавычка И Не ПредпоследнийКавычка))) ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; //ПредпоследнийКавычка = Ложь; //Если Сред(ТекстJSON, Поз - 1, 1) = """" Тогда // ПредпоследнийКавычка = Истина; //КонецЕсли; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз - 1); Значение = СтрЗаменить(Значение, """", ""); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); КонецЕсли; Результат.Вставить(ИмяЗначения, Значение); ИначеЕсли ТипДанных = "Массив" Тогда // обычное значение Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; //ПредпоследнийКавычка = Ложь; //Если Сред(ТекстJSON, Поз - 1, 1) = """" Тогда // ПредпоследнийКавычка = Истина; //КонецЕсли; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз - 1); Значение = СтрЗаменить(Значение, """", ""); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); Результат.Добавить(Значение); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
18
Лодырь
13.05.14
✎
11:03
|
Ну.. слово "массив" тебе ни на что ненамякивает?
|
|||
19
Леша1с
13.05.14
✎
11:10
|
(18) ну, ему что структура, что массив - обозвали "Структура", значит, массив обратился сам собой в структуру. Как в сказке. Главное - знать волшебное слово :))
|
|||
20
Эмбеддер
13.05.14
✎
11:15
|
(17) если что-то не пойдет с этой функцией, советую использовать эту библиотеку
http://legionwfz.blogspot.ru/ |
|||
21
never_be
13.05.14
✎
11:17
|
(19) (18) То есть Результат это масив внутри элементов которого лежит структура ? Никогда просто с таким не работал, как обратится в таком случае ?
Результат[0].Цена ? |
|||
22
Леша1с
13.05.14
✎
11:43
|
(21)примерно. А вообще, для начала проверить, какой тип возвращается, и от этого парсить результат.
А то вдруг прекратит возвращать массив, и снова будет возвращать структуру... )) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |