On Thursday, 24 July 2014 at 15:48:32 UTC, Edwin van Leeuwen
wrote:
On Thursday, 24 July 2014 at 15:42:58 UTC, Pavel wrote:
On Thursday, 24 July 2014 at 15:38:06 UTC, John Colvin wrote:
On Thursday, 24 July 2014 at 15:32:29 UTC, John Colvin wrote:
On Thursday, 24 July 2014 at 15:15:37 UTC, Pavel wrote:
Ok, let me start with the sample code:
import std.stdio;
import std.json;
void main() {
scope(failure) writeln("FaILED!!");
string jsonStr = `{ "name": "1", "type": "r" }`;
auto parsed = parseJSON(jsonStr);
string s = parsed["fail"].str;
writeln(s == "");
writeln(s is null);
writeln(s);
}
Running "rdmd app.d" doesn't produce any output.
Can anyone explain such a behavior???
PS: Running dmd v2.065 on Linux x64.
It's a bug in std.json (you should get a segfault, not no
output at all)
It is fixed now and I'm pretty sure it will be in 2.066
std.json has been improved a lot, but I would still
recommend using http://vibed.org/api/vibe.data.json/ instead
perhaps "bug" is too strong a word, but it was a deficiency
that is now corrected. You will get an exception thrown now
and everything should work how you expect.
Maybe. But still it's not the way I expect, any time you check
for non-existing property you must consider exception, which
is very heavy to deal with in such a situation. I'd rather
expect to get null, whenever I try to fetch non-existing
property, and not an exception.
You can turn your json object into an AA object and then use in
to check for existence (I know it is not very intuitive):
JSONValue[string] jsonAA = parsed.object;
if ( "fail" in jsonAA )
s = jsonAA["fail"].str;
That's purely my point, and I don't claim to be right in this
way. It's up to Phobos maintainers to decide how to reprent
JSON parsing results.
Guess what, here's a new snippet:
import std.stdio;
import std.json;
void main() {
scope(failure) writeln("FaILED!!");
string jsonStr = `{ "name": "1", "type": "r" }`;
auto parsed = parseJSON(jsonStr).object;
writeln("fail" in parsed);
}
Output is:
null
WAT?!
Ofcourse, writing like:
writeln(cast(bool)("fail" in parsed));
Produces "false"... but why on earth boolean expression would
output null?
PS: Sorry, for such an emotional boom, I'm so frustrated right
now.