是否有在HTML中嵌入JSON标准?(Is there a standard for embeddi

2019-08-07 06:49发布

我想嵌入JSON的HTML。 最优雅的解决方案,我发现利用了的script -标签和MIME媒体类型application/json

<script id="data" type="application/json">
    {
        "foo" : "bar"
    }
</script> 

这是嵌入JSON的标准呢? 如果不是,是否有与上述解决方案的风险?

使用内联JSON(而不是JSON-P服务)的原因:

  • 少量的JSON数据的
  • 少HTTP的请求
  • 偏好直列JSON在HTML中的属性数据

[UPDATE]原因嵌入JSON。

我有非常高流量网站画廊部件。 画廊可以由100个图像或更多。 我只显示一个图像的时间和图像的其余部分将是懒加载。 然而,信息(图像SRC)所有图像将在页面加载的HTML渲染。 有多种方式来呈现的HTML的图像信息。 除了使用JSON我还可以使用HTML数据的属性,如下图所示:

<li class="image" data-src="image-path.jpg">
    <!-- image tag will be created here using javascript -->
</li>

将导致:

<li class="image image-loaded" data-src="image-path.jpg">
    <img src="image-path.jpg" />
</li>

与上述解决方案的缺点是额外的标记。 我宁愿使用JSON和JavaScript的模板引擎如doT.js 。

Answer 1:

使用内联JSON(而不是JSON-P服务)的原因

您可以内嵌JSON-P为好。 OK,你只需要调用该方法“内联脚本”,但它既有:-)的优势



Answer 2:

我回答我的问题,因为我已经找到解决的办法。 我的解决方案是基于什么BERGI使用内联JSONP建议。 这是从1995年起就不需要手动JSON的解析找到一个答案,我实际的问题更好的解决方案。

该JSON数据(和HTML)是用Java Server Pages(JSP)生成。

步骤1

自定义变量名称使用JSP创建。 它将被用作JavaScript的全局变量,其JSON数据将被分配到。 这个名字是随机生成的,以防止在同一页上命名冲突。

<c:set var="jsonpVarName">jsnpData<%= java.lang.Math.round(java.lang.Math.random() * 1000000) %></c:set>    

步骤2该脚本标签具有cssClassname通过识别它和一个data-var -attribute,以便自定义变量名可以被确定。 ${ctrl.json}是JSP,并打印出JSON。 不像JSONP它采用了回调函数,使用全局变量。 到目前为止,我还没有经历过任何缺点。

<script class="data" data-var="${jsonpVarName}" type="text/javascript">
    window.${jsonpVarName} = ${ctrl.json};
</script>

步骤3访问的数据(使用jQuery)是一样简单:

var data = window[$('script.data').data('var')];

例如与上下文

HTML

<div class="myWidget">
    <button class="fetchData">Fetch Data</button>


    <c:set var="jsonpVarName">jsnpData<%= java.lang.Math.round(java.lang.Math.random() * 1000000) %></c:set>

    <script class="data" data-var="${jsonpVarName}" type="text/javascript">
        window.${jsonpVarName} = ${ctrl.json};
    </script>

</div> 

使用Javascript

$('button.fetchData', '.myWidget').click(function (e) {

    var data = window[$('script.data', '.myWidget').data('var')];    

});

我使用的是直列JSONP加载它需要在页面加载JSON数据。 它不是大量的数据,它是一个HTTP请求较少。



Answer 3:

你的建议是绝对正确的。 该type的属性的script标签必须是一个有效的MIME描述符。 据官方JSON RFC第6章“IANA注意事项”:

MIME媒体类型的JSON文本应用程序/ JSON。
类型名称:应用
子类型名:JSON

所以,你的HTML是有效的:

<script id="data" type="application/json">
    {
        "foo" : "bar"
    }
</script> 

而且,不,也有参与这样做没有额外的风险。



Answer 4:

尝试http://json2html.com/这对变换JSON到HTML的好办法。



文章来源: Is there a standard for embedding JSON in HTML?