@dlangru

Страница 9 из 719
Eto
09.05.2016
10:10:25
Конечно. Ведь opIndex ([<index>]) возвращает Json.

Dmitry
09.05.2016
10:11:23
сейчас попробую, я честно эти opIndex и тд полностью не понимаю, хотя очень старался разобраться

Eto
09.05.2016
10:11:42
Просто чей-нибудь код почитай.

Dmitry
09.05.2016
10:13:12
смотри, у меня тут закавырка. вот мой массив: {"hasMore":false,"result":[{"ip":"127.0.0.1","passedtests":"[firsttest8,firsttest8,firsttest8,firsttest8]","guid":""}],"code":201,"extra":{"stats":{"writesIgnored":0,"scannedIndex":0,"scannedFull":1,"executionTime":0,"filtered":0,"writesExecuted":0},"warnings":[]},"error":false,"cached":false} мнt нужно получить result а у result passedtests

Google
Dmitry
09.05.2016
10:13:23
проблема в том что passedtests это массив

и твой вариант у меня выводит пустоту

Eto
09.05.2016
10:14:25
passedtests это строка, в которой невалидный JSON лежит.

Dmitry
09.05.2016
10:14:38
валидный в кавычках должен быть?

Eto
09.05.2016
10:15:09
Нет, там ведь строка. Без разницы какое содержимое, почти. Только не сможешь его распарсить.

Dmitry
09.05.2016
10:15:28
а как его вывести то?

Eto
09.05.2016
10:16:08
А, у тебя results это массив объектов.

json["results"][0]["passedtests"].get!string.writeln; Если без проверок.

Dmitry
09.05.2016
10:17:46
ноль что тут делает?

Eto
09.05.2016
10:18:01
Первый элемент массива получает.

Там бы надо вставить проверки.

opIndex, кстати, очень прост: o[key] транслируется в o.opIndex(key). Всё. :)

Dmitry
09.05.2016
10:19:43
что-то не то, даже до следущего врайтлн не доходит

Google
Eto
09.05.2016
10:21:26
Даже ошибок никаких нет?

А, так погоди.

Dmitry
09.05.2016
10:21:52
нет, вообще ничего как видишь

Eto
09.05.2016
10:22:14
Ты фактически делаешь следующее: visitorsInfo["result"]["result"] ...

Dmitry
09.05.2016
10:25:41
а как надо то?

так, момент один

не, что-то не получается

Eto
09.05.2016
10:29:28
На строке с writeln удали ["result"].

Pavel
09.05.2016
10:29:55
https://dpaste.dzfl.pl/home попробуйте вот эту тулзу

Для collaborative editing должна помочь

Dmitry
09.05.2016
10:30:39
Eto, да почему-то writeln тут все блокирует

Eto
09.05.2016
10:31:09
Для collaborative editing должна помочь
Не сильно. Вроде же только один человек может редактировать.

Pavel
09.05.2016
10:31:54
Ну там написано что совместное редактирование типа :\ Надо зарегистрироваться и проверить.

Eto
09.05.2016
10:32:04
Eto, да почему-то writeln тут все блокирует
Потому что в result нет result. Оно видимо падает и в логи не выводит.

Dmitry
09.05.2016
10:32:59
да, я столкнулся с тем, что данные могут прилетать обратно как массив т..е не {} а [{}]

хотя тут вроде бы все ок

и прилетает просто JSON

а не, погоди, с выводом я щас сам тупанул

я же решил для упращения сделать из данных JSON и потом с ним работать: Json resultJson = visitorsInfo["result"]; writeln(to!string(resultJson["passedtests"]));

не и так что-то не работает

Google
Dmitry
09.05.2016
10:35:59
а не работает, потому что у меня массив: [{"ip":"127.0.0.1","passedtests":"[firsttest8,firsttest8,firsttest8,firsttest8,firsttest9]","guid":""}] и как быть хз

щас попробую

Pavel
09.05.2016
10:36:55
https://dpaste.dzfl.pl/baf114053d1c Можешь редактировать?
Как-то нет :\ Только выделить могу

Eto
09.05.2016
10:37:29
Как-то нет :\ Только выделить могу
Там кнопочка edit есть в меню Actions.

Dmitry
09.05.2016
10:37:37
О!

Eto
09.05.2016
10:37:45
Там кнопочка edit есть в меню Actions.
У меня, по крайней мере.

Pavel
09.05.2016
10:37:58
У меня в actions только download и raw

Возможно если я зарегаюсь то будет доступ к редактированию

Dmitry
09.05.2016
10:38:17
во! отлично спасибо огромное!

Pavel
09.05.2016
10:38:50
Но похоже что под совместным редактированием имеется в виду последовательный копипаст кода и шаринг новых ссылок :)

Dmitry
09.05.2016
10:38:57
А от кавычек избавиться как можно? Кроме как реплейсом. Ну типа: "[firsttest8,firsttest8,firsttest8,firsttest8,firsttest9]"

Eto
09.05.2016
10:39:56
Возможно если я зарегаюсь то будет доступ к редактированию
Там через OpenID заход через одно нажатие. Самое сложное — запомнить через что зашёл.

А от кавычек избавиться как можно? Кроме как реплейсом. Ну типа: "[firsttest8,firsttest8,firsttest8,firsttest8,firsttest9]"
Увы, только если самостоятельно удалять [] и разбивать по запятым.

Dmitry
09.05.2016
10:41:04
Кстати, а в JS так же можно будет сделать чтобы перейти к нужному элементу? visitorsInfo["result"][0]["passedtests"] ты не в курсе?

Pavel
09.05.2016
10:41:59
Там через OpenID заход через одно нажатие. Самое сложное — запомнить через что зашёл.
Омг, при входе через фейсбук у меня все отвалилось со стектрейсом из kohana :)

Dmitry
09.05.2016
10:44:35
так, ты кажется вчера говорил что массив и JSON объект который я получаю это разные вещи и нужно через get!string делать так?

Google
Dmitry
09.05.2016
10:46:36
О!

получилось! даже кавычки убрало при стрингофикации!

Eto
09.05.2016
10:47:56
По нормальному, когда уже получаешь финальное значение надо вызывать get!T. В принципе, нет особой разницы, что вызывать get!string или to!string, если тебе строку надо получить.

Dmitry
09.05.2016
10:49:11
а в чем у них разница то получается?

Eto
09.05.2016
10:50:56
to!string всегда строку вернёт, независимо от конкретного типа содержимого в Json. А get!string бросит ошибку, если содержимое не строка.

Dmitry
09.05.2016
10:52:59
Я еще в грядущую замену JSON втыкаю и есть ряд вопросов. http://s-ludwig.github.io/std_data_json/stdx/data/json/value.html почему они когда строку лепят делают JSONValue только у значения, а не у ключа? "a": JSONValue("hello") ведь по идее нужно и там и там

Eto
09.05.2016
10:54:27
Потому что [key: value]. key должно быть строкой.

Dmitry
09.05.2016
10:55:12
ну так только значение почему-то обрамляется

Eto
09.05.2016
10:56:49
Так всё правильно. Сейчас получается тип этого выражения JSONValue[string]. Если ты и ключ обёрнешь в JSONValue, то получится JSONValue[JSONValue]. Что не имеет смысла. В JSON только строки могут быть ключами в словаре.

Dmitry
09.05.2016
10:57:17
а... спасибо, понял

А вот от этого у меня мозг вскипает. У них проблема с именованием или я чего-то не понимаю? http://s-ludwig.github.io/std_data_json/stdx/data/json/generator/toJSON.html Почему toJSON переводит в СТРОКУ, а не в JSON

Eto
09.05.2016
10:59:17
Сейчас тоже самое в стандартной библиотеке.

Под JSON тут подразумевается, что это непосредственно данные, в финальном виде.

Dmitry
09.05.2016
10:59:44
а где логика??

Dmitry
09.05.2016
11:01:34
а... назвали бы блин как нить типа JSONString

Eto
09.05.2016
11:02:16
Можно было бы. Но эти алиасы только дополнительная когнитивная нагрузка.

Dmitry
09.05.2016
11:03:27
Кстати, а почему оно не может напрямую из входной строки спарсить все и обязательно нужно чтобы передавалось через переменную:

Eto
09.05.2016
11:13:54
Потому что ссылку (ref) берёт. Т.е. lvalue ему нужен. А строковый литерал — это rvalue. rvalue не имеет адреса.

Google
Dmitry
09.05.2016
11:25:00
это для скорости сделано?

т.е. глядя на то что тут есть понятие как Location видно что там какие-то заморочки есть

и еще я не понимаю когда пишут про ленивую итерацию. Это в каких случаях бывает нужно?

Eto
09.05.2016
11:28:54
это для скорости сделано?
Да, на сколько понимаю.

Dmitry
09.05.2016
11:29:33
И кстати, как я понимаю в новом модуле JSON который мы обсуждаем нет get! есть только toString так?

Eto
09.05.2016
11:31:15
и еще я не понимаю когда пишут про ленивую итерацию. Это в каких случаях бывает нужно?
Многие алгоритмы пишут сразу ленивыми. По сути, если не будет разницы в производительности между eager и lazy вариантами алгоритма, то проще сразу сделать lazy. А потом просто вызывать. А когда нужно? Ну, например, когда у тебя бесконечный range.

И кстати, как я понимаю в новом модуле JSON который мы обсуждаем нет get! есть только toString так?
Почему же? Вот, он тут есть: http://s-ludwig.github.io/std_data_json/stdx/data/json/value/JSONValue.html

Dmitry
09.05.2016
11:31:59
у них разные имена обычно? Или перегрузки могут быть из ленивого в обычный?

Eto
09.05.2016
11:32:04
Просто от одного toString смысла мало.

у них разные имена обычно? Или перегрузки могут быть из ленивого в обычный?
Разные имена обычно. Или eager версии может и не быть.

Dmitry
09.05.2016
11:37:52
а откуда вот тут могут кавычки опять вылезать? вверху же их нет:



Eto
09.05.2016
11:39:36
Первое это строка. Почему и нет кавычек. А второе это JSON, кавычки его часть.

Dmitry
10.05.2016
06:58:12
@sigod а как лучше проверять сущестувует ли json объект данной вложенности? Кроме как try-catch

Eto
10.05.2016
07:39:54
@sigod а как лучше проверять сущестувует ли json объект данной вложенности? Кроме как try-catch
В документации этого не написано, но судя по коду opIndex возвращает undefined, если значение не найдено. Т.е. можно как-то так: auto result = visitorsInfo["result"]; if (result.type == Json.Type.undefined) // error // etc Но в целом, если ты ожидаешь JSON в каком-то определённом формате, то пожалуй лучше использовать try-catch. Или вообще использовать фреймворк сериализации.

Dmitry
10.05.2016
07:40:33
Я пока вот так сделал: visitorsInfo["result"].toString != []

вроде работает

Eto
10.05.2016
07:41:50
Грязный вариант. Выделяешь память для строки, которая сразу же выкидывается. Да и проверка не делает, то что ты хочешь.

auto result = visitorsInfo["result"]; enforce(result.type == Json.Type.array); enforce(result.length > 0); auto element = result[0]["passedtests"]; // etc

Dmitry
10.05.2016
07:50:39
получается что самая простая проверка это? result.length > 0 ?

Страница 9 из 719