D JSON (WAT?!)

Pavel via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jul 24 09:08:27 PDT 2014


On Thursday, 24 July 2014 at 16:02:12 UTC, H. S. Teoh via 
Digitalmars-d-learn wrote:
> On Thu, Jul 24, 2014 at 03:54:20PM +0000, Pavel via 
> Digitalmars-d-learn wrote:
> [...]
>> 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?
>
> It's not a boolean expression. The 'in' operator returns a 
> pointer.
> Rationale: avoid double lookups, for example:
>
> 	if (auto ptr = "key" in assocArray) {
> 		doSomething(*ptr);
> 	}
>
>
> T

Thanks once again. Now I finally get this thing done with code 
like this:

import std.stdio;
import std.json;

void main() {
   scope(failure) writeln("Failure!!");
   string jsonStr = `{ "name": "1", "type": "r" }`;
   auto parsed = parseJSON(jsonStr).object;
   auto found = "fail" in parsed;
   if (found !is null) {
     string s = found.str;
     writeln(s);
   } else {
     writeln("No such key");
   }
}

Still focus on wrapper class discussion :)


More information about the Digitalmars-d-learn mailing list