2014-02-19 51 views
2

使用Vibe.D庫,通過Json數組迭代的正確方法是什麼?如何迭代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("---"); 
} 
+1

看起來像vibe.d傢伙沒有實現opApply - 我會把它作爲一個bug與他們。我不知道正確的做法,但我不是一個振動的用戶:( –

+0

你可以展示一個完整的例子嗎?因爲我認爲你的代碼應該可以工作。 這個頁面有一個使用foreach的例子'Json 'object。 http://vibed.org/api/vibe.data.json/ – yaz

+0

@yaz這就是我的代碼所基於的。'configuration'是Json類型的對象。我沒有訪問我的(不同的電腦) –

回答

3

在你的代碼index絕是整數類型 - 這幾乎是錯誤消息說的。 JSON數組始終是普通數組,關聯的數組稱爲JSON對象。

例子:

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

或者乾脆

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

更新:改變intsize_t匹配實際opApply簽名

+0

我試過了,但是不允許我在這種情況下設置字符串的值 –

+0

更新了代碼示例的答案 –

+0

'錯誤:不能唯一推斷foreach參數類型' –

0

出於某種原因,使用ULONG工作。我猜這是一個錯誤?

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

不,它匹配JSON模塊中的opApply簽名(有符號和無符號都不是可互換的afaik) –