首页 > 解决方案 > 使用 json 模式验证 JSON 失败

问题描述

嗨,我需要使用生成 json 的 API 进行学校分配。

我得到了 $API 我的 json。通过我自己的一些测试,我可以说 json 是正确的。但在 assigement 中说我需要使用 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
                    }
                ?>

标签: javascriptphpjson

解决方案


将两者都替换<?php echo $API; ?><?php echo str_replace('"', '\\"', $API); ?>

更好的是,您可以执行一次此过程,然后回显转义的字符串:

<?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 的 Javascript 与产生无效 Javascript 的“回显”混合在一起。这就是为什么您需要在“回显”您的 JSON 之前转义它们。


推荐阅读