簡體   English   中英

如何使用jsweet :: is-my-json-valid candy驗證JSON數據-帶有完整的錯誤報告?

[英]How do I validate JSON data - with full error report - using the jsweet::is-my-json-valid candy?

我正在研究Javascript項目,並使用JSweet框架編寫Javascript部分。 作為其功能的一部分,我的應用程序將異步加載一些JSON數據(存儲為單獨的文件)。 我想使用JSON模式驗證器驗證數據。 JSweet提供了幾種這樣的驗證器,其中之一是“ is-my-json-valid”的端口( https://github.com/mafintosh/is-my-json-valid中的原始Javascript庫, http中的 JSweet端口: //public.jsweet.org/apidocs/releases/org/jsweet/candies/is-my-json-valid )。

我已經能夠使用is-my-json-valid庫為我提供一個給定JSON塊是否符合給定JSON模式的真/假指示。 但是,在驗證失敗的情況下,我也想檢索有關失敗原因的錯誤詳細信息(例如“必填屬性等等”)。

我如何在JSweet中使用is-my-json-valid庫,所以我得到的不是真/假指示-即我也得到了一份完整的報告,告訴我JSON數據出了什么問題?

這是我的JSweet測試程序。 轉譯的Javascript已經正確地引發了異常-唯一令我高興的是詳細的錯誤報告:

package json_valid.test_01;

import static def.is_my_json_valid.Globals.is_my_json_valid;

import jsweet.lang.Error;
import jsweet.lang.JSON;

public class Test_01
{
    public static void main (String[] args)
    {
        String              sSchema;
        String              sTestFail;
        String              sTestPass;

        sSchema     =
            "{\n"
            + "  \"required\": true,\n"
            + "  \"type\": \"object\",\n"
            + "  \"properties\": {\n"
            + "    \"hello\": {\n"
            + "      \"required\": true,\n"
            + "      \"type\": \"string\"\n"
            + "    }\n"
            + "  }\n"
            + "}\n";
        sTestFail       = "{\"a\": \"b\"}";
        sTestPass       = "{\"hello\": \"world\"}";
        _AssertConforms (sTestPass, sSchema);   /* Ok - expect nothing printed to console  */
        _AssertConforms (sTestFail, sSchema);   /* AiaOw - expect error message on console */
    }

    private static void _AssertConforms (String jsonData, String jsonSchema)
    {
        Object              oSchema;
        Object              oTested;
        boolean             result;
        String              specifics;
        String              message;

        oTested = JSON.parse (jsonData);
        oSchema = JSON.parse (jsonSchema);
        result = is_my_json_valid (oSchema).apply (oTested);
        if (! result)
        {
            specifics = "Sorry, still waiting for that nifty code to extract error specifics from is-my-json-valid.";
            message   = "Validation failed. Error specifics: " + specifics;
            throw new Error (message);
        }
    }
}

我的HTML測試頁相當無聊:

<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>JSON validator test</title>
<script src="../../../target/dist/bundle-test_01.js"></script>
</head>
<body>

</body>
</html>

但是,當我將頁面加載到Chrome網絡瀏覽器中時,網絡控制台會為我提供一個預期的異常:

bundle-test_01.js:1535 Uncaught Error: Validation failed. Error specifics: Sorry, still waiting for that nifty code to extract error specifics from is-my-json-valid.
    Test_01._AssertConforms @ bundle-test_01.js:1535
    Test_01.main @ bundle-test_01.js:1521
    12.is-my-json-valid @ bundle-test_01.js:1541
    s @ bundle-test_01.js:1
    e @ bundle-test_01.js:1
    (anonymous function) @ bundle-test_01.js:1

我所缺少的只是異常消息中的錯誤詳細信息。

非常感謝您的考慮!

看起來當前版本的JSweet尚未與is-my-json-valid組件一起使用。 從JSweet作者:

好。 我有壞消息。

我仔細查看了is-my-json-valid,似乎它僅作為節點模塊提供。 從理論上講,這不是問題,您只需要使用“模塊”選項進行編譯即可。 但是,JSweet似乎還不支持定義模塊的方式。 看起來JSweet不能正確要求該模塊,因為它在此處指定: https : //github.com/mafintosh/is-my-json-valid

通常,在使用模塊之前,最好先知道是否可以在瀏覽器中使用它,因為JSweet仍僅部分支持節點模塊。

好消息是,is-my-json-valid似乎是我一直在尋求改善JSweet需求的完美用例,正如在#129中已經討論的那樣。 因此,我將盡快進行處理。

參見https://github.com/cincheo/jsweet/issues/144

暫無
暫無

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

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