首页 > 解决方案 > 使用纯 JS 或 jQuery 从 JavaScript 中的 HTML 反序列化数据

问题描述

我目前正在尝试反序列化从 HTML 数据属性给出的数据。该值来自我的数据库的序列化字符串。

为了获得值,我正在从我的数据库中读取数据。之后,我将替换任何 " by ' 以防止 HTML 中的开始和结束标记出现问题:

<span data-value="<?= str_replace( '"', "'", $obj->value ) ?>"

这是一个最终看起来如何的示例:

<span data-value="a:2:{i:0;a:2:{s:5:'issue';s:4:'Test';s:10:'estimation';s:1:'5';}i:1;a:2:{s:5:'issue';s:4:'Impl';s:10:'estimation';s:1:'5';}}"></span>

我现在的计划是接收 JS 中的值并将其转换回数组,以便循环遍历它。我已经尝试过JSON.parse()了,但失败了。你知道如何完成这项工作吗?

更新:

因为你们中的一些人告诉我,我的替换破坏了我的字符串,这是原始的一个示例:

jQuery( document ).ready( function ( $ ) {
  let attr = $("span").attr("data-test");
  
  console.log(JSON.parse(attr));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-test='a:2:{i:0;a:2:{s:5:"issue";s:4:"Test";s:10:"estimation";s:1:"5";}i:1;a:2:{s:5:"issue";s:4:"Impl";s:10:"estimation";s:1:"5";}}'></span>

标签: javascriptphpjqueryarrays

解决方案


您正在尝试将序列化的数据位(不是 JSON)解析为 JSON!

相反,只需使用 JSON!

<?php

$x = 'a:2:{i:0;a:2:{s:5:"issue";s:4:"Test";s:10:"estimation";s:1:"5";}i:1;a:2:{s:5:"issue";s:4:"Impl";s:10:"estimation";s:1:"5";}}';
$array = unserialize($x);

header('Content-Type: application/json');
echo json_encode($array);

https://3v4l.org/Z3jJA

现在你的东西看起来像这样:

<span data-value='[{"issue":"Test","estimation":"5"},{"issue":"Impl","estimation":"5"}]'></span>

请注意,我使用了单引号!

你的 JS 应该可以工作。:-)


推荐阅读