嗨,我需要用一个生成JSON的API做一个学校作业。
我用$API获得了我的JSON。 通过我自己的一些测试,我可以说json是正确的。 但是在赋值中,它说我需要用json模式来验证它。 我有一个模式,但是我不能让它工作,所以它将检查和验证传入的JSON。
如果有人看到问题,请告诉我,因为我找不到。
<?php
//Json gets validated
if(isset($API))
{
?>
<script src="//cdnjs.cloudflare.com/ajax/libs/validate.js/0.13.1/validate.min.js">
var validator = require('validator');
var jsv = require('json-validator');
jsv.validate("<?php echo $API; ?>", "json_schema.json", function(err, messages)) {
if(err)
{
throw err;
}
else
{
$.getJSON("<?php echo $API; ?>", function(data)
{
var items = [];
$.each(data, function(key, val, val2) {
items.push("<li id='" + key + "'>" + val["COL 3"] + "</li>");
items.push("<br>");
});
$("<ul/>", {
"class": "my-new-list",
html: items.join("")
}).appendTo(".datapanel");
});
}
}
</script>
<?php
}
?>
替换由
。
更好的是,您可以只执行一次这个过程,然后回显转义字符串:
<?php
// Json gets validated
if (isset($API))
{
// escape your JSON string
$escapedAPI = str_replace('"', '\\"', $API);
?>
...
<!-- echo the escaped string -->
<?php echo $escapedAPI; ?>
...
<?php
}
?>
您目前面临的问题是,当PHP在Javascript中回显JSON时,它会生成如下内容:
jsv.validate("[{"COL 3":"(APPLAUSE)"}, ... ]", "json_schema.json", function() { ... })
正如您所看到的,Javascript中的“
与”echoed“混合在一起,产生了无效的Javascript,这就是为什么您需要在”echoed“JSON之前转义它们。