如何在Vibe.D中迭代JSON数组?
使用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"]) {
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不可互换)