如何检查JSON数组中是否存在元素?

Dmi*_*kov 0 json d find

Json test = Json.emptyArray;
test ~= "aaa";
test ~= "bbb";
test ~= "ccc";
writeln(test);
Run Code Online (Sandbox Code Playgroud)

输出: ["aaa","bbb","ccc"]

但是如何检查这个数组是否有元素?我无法想象如何使用canFindJSON数组.我正在使用振动的json模块.

if(test.get!string[].canFind("aaa"))
{
    writeln("founded");
}
Run Code Online (Sandbox Code Playgroud)

不起作用: Got JSON of type array, expected string.

如果这样做:

if(test.get!(string[]).canFind("aaa"))
{
    writeln("founded");
}
Run Code Online (Sandbox Code Playgroud)

Error: static assert "Unsupported JSON type 'string[]'. Only bool, long, std.bigint.BigInt, double, string, Json[] and Json[string] are allowed."

使用to!stringtoString方法所有工作:

Json test = Json.emptyArray;
test ~= "aaa";
test ~= "bbb";
test ~= "ccc";
writeln(to!string(test));

if(test.toString.canFind("aaa"))
{
    writeln("founded");
}
Run Code Online (Sandbox Code Playgroud)

但如果我在foreach中做到这一点:

foreach(Json v;visitorsInfo["result"])
{
if((v["passedtests"].toString).canFind("aaa"))
 {
    writeln("founded");
 }
}
Run Code Online (Sandbox Code Playgroud)

我得到了:Error: v must be an array or pointer type, not Json.怎么了?

Col*_*Two 5

JSON数组对象是其他JSON元素的数组.它们不是字符串数组,这就是elem.get!(string[])编译时失败的原因.

切片JSON元素以获取子元素数组,然后使用canFind's predicate参数从每个子元素中获取字符串.

writeln(test[].canFind!((a,b) => a.get!string == b)("foo"));
Run Code Online (Sandbox Code Playgroud)