在我的数据库中,我将json保存在名为usp-custom-12
的自定义字段中,如下所示:
[{"Mamma":["Papa"]}]
然后我尝试解码
<?php
$jsonTable = usp_get_meta(false, 'usp-custom-12');
?>
var data = <?php echo htmlspecialchars_decode($jsonTable); ?>;
但是它给了我
var data = "[{"Mamma":["Papa"]}]";
控制台日志错误:
未捕获的SyntaxError:意外的标识符
完整代码:
<?php
$jsonTable = usp_get_meta(false, 'usp-custom-12');
?>
var data = "<?php echo htmlspecialchars_decode($jsonTable); ?>";
console.log(data);
data = JSON.parse (data);
data.forEach(obj => {
Object.keys(obj).forEach(key => {
$('#newTable thead tr').append($('<th>').text(key));
obj[key].forEach((e, i) => {
if(!$("#newTable tbody tr:eq("+i+")").length) $("<tr>").appendTo($("#newTable tbody"));
$("#newTable tbody tr:eq(" + i + ")").append($('<td>').text(e))
})
})
});
在这个jsFiddle中,如果你单击保存表,你会看到它生成一个与顶部表相同的表,这也是在控制台中登录正确的json:https://jsfiddle.net/fbh0o67o/74/
答案 0 :(得分:4)
$jsonTable
包含一个带有html实体编码的JSON字符串,因为它已经是JSON,你只需解码html etities并按原样回显它。不需要JSON解码,不需要引用。只需HTML解码并将其回显到您的javascript中。
var data = <?php echo htmlspecialchars_decode(usp_get_meta(false, 'usp-custom-12')); ?>;
data.forEach(obj => {
// Loop stuff here...
});
答案 1 :(得分:3)
问题在于字符串"mama"
中的引号需要使用addslashes
方法来转义这些引号。
尝试使用以下内容:
var data = "<?php echo addslashes(htmlspecialchars_decode($jsonTable)); ?>";
答案 2 :(得分:1)
JSON到PHP:
json_decode($string);
如果您使用可选参数$assoc
作为true
- json_decode($string, true)
将成功返回关联数组。
PHP到JSON:
json_encode($array);
PHP手册: json_encode() json_decode()