簡體   English   中英

果凍:使用 JSON 對象創建表

[英]jelly: Create a table using JSON object

我正在嘗試構建一個Jenkins Post build plugin ,我必須在其中處理JSON文件(包含測試結果)並在執行構建后在Jenkinstabular format顯示它。

以下是到目前為止完成的步驟:

  1. 創建Jenkins插件
  2. 能夠檢索 JSON 文件內容並將其作為 Google gson JSONElement
  3. 內置BuildAction (擴展 Action)以顯示結果。
  4. 在對應於BuildAction index.jelly ( view for BuildAction ) 中,嘗試將 JSON 文件中的每條記錄顯示為一行。

JSON文件示例:

{
    "records": [{
        "objectProps": {
            "OTYPE": "TEST",
            "NAME": "testMethodError",

        }
    },
    {
        "objectProps": {
            "OTYPE": "TEST",
            "NAME": "testMethodFail",
        }
    }]
}

BuildAction 類:

public class BuildAction implements Action {
    private JsonElement results;
    private Run<?, ?> build;
    TaskListener listener;

    // this value referred as `it.results` in `index.jelly`
    public JsonArray getResults(){
        return results.getAsJsonObject().get("records").getAsJsonArray();
    }

}

上面BuildAction類的當前index.jelly

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout">
    <l:layout>
        <st:include it="${it.build}" page="sidepanel.jelly"/>
        <l:main-panel>
            <table> Test - Wise Results
             <j:forEach items="${it.results}" var="i">
                <tr><td>Test case name: ${i}</td></tr>
             </j:forEach>
            </table>         
        </l:main-panel>

    </l:layout>
</j:jelly>

實際行為:

到目前為止, ${results}值是JSONArray類型。 forEach in jelly,我可以迭代並使用 var i (語法${i} )獲取記錄。 i指的是records JSONArray 中的每條記錄。 現在,我想使用i訪問objectProps.NAME字段,我不知道 Jelly 中實現相同的語法。

預期行為:

我想遍歷 JSON 文件中的records數組,並將每個 child/jsonObject 作為一個表行(及其值作為相應的列)。

與此類似的內容(訪問NAME值):

<j:forEach items="${it.results}" var="i">
   <tr><td>Test case name: ${i}."objectProps"."NAME"</td></tr>
</j:forEach>

在使用JellyJSON構建table時需要幫助。 任何其他實現相同的方式也歡迎(請在建議相同時發布代碼示例)。

注意:也歡迎與Groovy相關的答案,因為Jenkins支持Jelly and Groovy for View

我有興趣解決您的問題,但可能沒有 100% 確定的答案,因為我無法在本地進行測試。

您是否嘗試過在您的${i.objectProps.NAME}使用${i.objectProps.NAME}${i."objectProps"."NAME"}而不是${i}."objectProps"."NAME"

您還可以查看g:evaluate是否可用,因為 jelly 可能不會在沒有明確告訴它的情況下評估您的變量。 您可以在 此處找到有關g:evaluate一些文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM