提问者:小点点

使用JSON架构验证JSON失败


嗨,我需要用一个生成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
                    }
                ?>

共1个答案

匿名用户

替换

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

<?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之前转义它们。