
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

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

Eto
09.05.2016
10:32:04

Dmitry
09.05.2016
10:32:59
да, я столкнулся с тем, что данные могут прилетать обратно как массив т..е не {} а [{}]
хотя тут вроде бы все ок
и прилетает просто JSON
а не, погоди, с выводом я щас сам тупанул
я же решил для упращения сделать из данных JSON и потом с ним работать:
Json resultJson = visitorsInfo["result"];
writeln(to!string(resultJson["passedtests"]));
не и так что-то не работает

Google

Eto
09.05.2016
10:35:19

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

Eto
09.05.2016
10:37:29

Dmitry
09.05.2016
10:37:37
О!

Eto
09.05.2016
10:37:45

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

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

Pavel
09.05.2016
10:41:59

Eto
09.05.2016
10:42:21

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
а где логика??

Eto
09.05.2016
11:00:20
parseJSON возвращает JSONValue.

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

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

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

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

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 ?