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.