当前位置: 首页 > 面试题库 >

将JSON存储在HTML属性中的最佳方法?

叶稳
2023-03-14
问题内容

我需要将JSON对象放入HTML元素的属性中。

  1. HTML不必验证。

昆汀回答: 将JSON存储在data-*有效HTML5
的attribute中。

  1. JSON对象可以是任何大小-即巨大

  2. 如果JSON包含特殊字符怎么办? 例如 {foo: '<"bar/>'}

昆汀回答:按照常规惯例,将JSON字符串放入属性之前,先对其进行编码。 对于PHP,请使用
htmlentities() 函数。

编辑-使用PHP和jQuery的示例解决方案

将JSON写入HTML属性:

<?php
    $data = array(
        '1' => 'test',
        'foo' => '<"bar/>'
    );
    $json = json_encode($data);
?>

<a href="#" data-json="<?php echo htmlentities($json, ENT_QUOTES, 'UTF-8'); ?>">CLICK ME</a>

使用jQuery检索JSON:

$('a').click(function() {

    // Read the contents of the attribute (returns a string)
    var data = $(this).data('json');

    // Parse the string back into a proper JSON object
    var json = $.parseJSON($(this).data('json'));

    // Object now available
    console.log(json.foo);

});

问题答案:

HTML不必验证。

为什么不?验证真的很容易进行质量检查,它会捕获很多错误。使用HTML 5 data-*属性。

JSON对象可以是任何大小(即巨大)。

我还没有看到有关属性大小的浏览器限制的任何文档。

如果确实遇到了问题,请将数据存储在中<script>定义一个对象,然后将ids 映射到该对象中的属性名称。

如果JSON包含特殊字符怎么办?(例如{test:’<“ myString />’})

只需遵循将不可信数据包含在属性值中的常规规则即可。使用&amp;&quot;(如果将属性值用双引号引起来)或&#x27;(如果将属性值用单引号引起来)。

但是请注意,它不是JSON(这要求属性名称为字符串,并且字符串只能用双引号分隔)。



 类似资料:
  • 问题内容: 我使用这种方法在HTML标记中存储数据,如下所示: 然后,我在这样的回调中检索数据: 很好 我所坚持的是尝试保存对象,而不仅仅是保存其属性之一。我试图这样做: 然后,我尝试像这样访问name属性: 日志告诉我。所以好像我可以在属性中存储简单的字符串,但不能存储JSON对象… 我也尝试过使用这种语法的孩子,但运气不好: 关于使用该方法如何在HTML标签中存储实际对象的任何想法? 问题答案

  • 问题内容: 在MySQL数据库中存储IP地址的最佳字段类型和长度是什么? IPv6呢? 问题答案: 将IP存储为,然后使用和功能存储/检索IP地址。 样例代码:

  • 我希望得到一些关于通过relationship(使用laravel关系)访问properties表中模型可以拥有的所有属性与将所有属性/设置存储在同一个表中但存储在json列中的反馈。 目前,我的应用程序有一个名为settings的propeties表,它在本质上也是多态的,因此多个模型可以在那里存储它们的属性。此表有如下列: 这样我就不会向javascript前端发送字符串,而是可以发送字符串、

  • 问题内容: 哪种方法可以更好地检查属性是否存在? Jarret Hardie提供了以下答案: 我看到它也可以通过以下方式完成: 一种方法通常比其他方法使用更多吗? 问题答案: 没有“最佳”方法, 因为您永远不会仅仅检查属性是否存在;它始终是某些较大程序的一部分。有几种正确的方法,一种值得注意的不正确的方法。 这是演示此技术失败的演示: 输出: 大多数情况下,您不想惹恼。这是用于执行特殊操作的特殊属

  • 问题内容: 我正在使用Redis来存储一些信息并检测该信息随时间的变化(例如,考虑用户和位置)。使用更长或更短的键名的值是什么?使用更长的键会更清楚,但是使用更长的键名是否会在内存或性能上付出很多成本? 以下是示例: 要么 问题答案: 这完全取决于您将如何使用它。如果每个字节都很重要,例如,当您必须为传输到云服务的每个kB支付费用时,您可以计算成本。数学很简单;一个字节是“在线”上的一个字节。在r

  • 问题内容: 我正在将GTFS提要存储到SQL数据库中,并且预计某些时间会存储在时间值上限24:00:00之上。例如,某些火车在上午12:30开行,但列出了前几天的服务,在GTFS规范中,该行车时间被存储为24:30。 解决这个问题的最佳方法是什么?我应该将其存储为字符串吗? 问题答案: 建议为此使用int …您的值可能是: 对于24:30:00,您将获得88200。 从数据库加载值时,可以通过简单