如何使用jsweet::is-my-json-valid糖果验证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'的端口(原始Javascript库在https://github.com/mafintosh/is-my-json-valid, JSweet端口在http://public.jsweet.org/apidocs/releases/org/jsweet/candies/is-my-json-valid)。
我已经能够使用is-my-json-valid库给我一个真/假的指示是否给定的JSON块符合给定的JSON模式。但是,在验证失败的情况下,我还希望检索错误细节,以了解失败的原因(例如:'required attribute blah').
我如何在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 web浏览器时,web控制台为我提供了一个异常,如预期的:
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作者:
Ok。我有个坏消息。
我仔细查看了is-my-json-valid,似乎它只是作为节点模块提供。这不是问题,从理论上讲,你只需要使用"module"选项进行编译。然而,它似乎模块的定义方式还不支持JSweet。看起来JSweet不能正确地要求模块,因为它在这里指定:https://github.com/mafintosh/is-my-json-valid.
一般来说,在使用一个模块之前,最好知道它是否可以从浏览器中使用,因为节点模块仍然只是部分的
好消息是is-my-json-valid似乎是一个完美的用法案例,我正在寻找改进JSweet的要求,因为已经在#129中讨论过。所以我会尽快解决的。
见https://github.com/cincheo/jsweet/issues/144
- 我如何修复包含在captcha的addthis中的错误
- FriendsOfSymfony/FOSJsRoutingBundle包含错误
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- fs.statSync包含在函数中时抛出错误
- 为什么jqPlot显示了一个错误的饼图,其中包含通过AJAX检索的数据
- 我收到一个类型错误,其中包含-"$不是函数“;使用noConflict时
- 包含的文件中引发引用错误..除非调用文件包含慢速代码
- ASP.NET MVC - 未捕获的引用错误:即使我包含库,也不会定义jQuery
- Sonar Javascript插件错误:“无法装饰”和“在其源文件夹中不包含任何文件”
- 打字稿错误:P roperty'包含'在类型'元素'上不存在
- 无法修改Controls集合,因为控件包含代码块(即<%.%>).无法更正此错误
- IE8对象当对象包含null值时应出现错误
- "未终止的模板文字“;当文字包含脚本标记时出现语法错误
- 我们如何捕捉主文件中包含的javascript文件引发的错误
- WebGL错误-错误:WebGL:bindBuffer:buffer已包含元素数据
- 不兼容的数据表: 错误:表包含的列数超过预期
- 火狐 SDK 错误“图像包含错误,无法显示”
- 变量错误消息=“ ”;中应包含的对象
- 错误 403(禁止),当 HTML 包含 CSS 和 JS 等资源时
- 如何获取包含HtmlUnit错误的网页