如何在Vibe.D中迭代JSON数组?

如何在Vibe.D中迭代JSON数组?,d,vibed,D,Vibed,使用Vibe.D库迭代Json数组的正确方法是什么 我已经尝试过了,但它给了我编译错误: foreach(string index, Json value; configuration["array1"]) {} 这就是错误: Error: opApply() function for Json must return an int 完整代码: foreach(int index, Json pluginToLoad; configuration["PluginsToLoad"]) {

使用Vibe.D库迭代Json数组的正确方法是什么

我已经尝试过了,但它给了我编译错误:

foreach(string index, Json value; configuration["array1"]) {}
这就是错误:

Error: opApply() function for Json must return an int
完整代码:

foreach(int index, Json pluginToLoad; configuration["PluginsToLoad"]) {
    import std.conv;
    logInfo(to!string(index));
    logInfo(pluginToLoad.get!string);
    logInfo("---");
}

在您的代码中,
索引必须是整数类型-这与错误消息所说的非常相似。JSON数组始终是普通数组,关联数组称为JSON对象

例如:

foreach (size_t index, Json value; configuration["array1"]) {}
或者干脆

foreach (index, value; configuration["array1"]) {} // type inference

更新:出于某种原因,使用ulong works将
int
更改为
size\u t
,以匹配实际的opApply签名。我猜这是一只虫子

foreach(ulong index, Json pluginToLoad; configuration["PluginsToLoad"])

看起来vibe.d的家伙没有实现opApply-我会把它作为一个bug提交给他们。但我不知道正确的方法,我不是一个活跃的用户:(你能给出一个完整的例子吗?因为我认为你的代码应该可以工作。这个页面有一个例子,在
Json
对象上使用foreach。@是的,这就是我的代码的基本基础。
configuration
是Json类型的对象。我没有访问我的代码atm的权限,但我会尽快给它。(不同的计算机)我试过了,但在这种情况下它不允许我将值设置为string。
错误:无法唯一地推断每个参数类型
这是否意味着
opApply
没有正确实现?我用谷歌搜索了这个问题,
opApply
似乎是一个流行的问题。Adam D.Ruppe也提出了类似的建议。我已经看过了在JSON源代码中,推断可能不起作用,因为opApply重载()太多,所以编译器无法猜测要使用哪个。不,它匹配JSON模块中的opApply签名(签名和未签名的afaik不可互换)