javascript - 我可以提取字符,但不能提取 JSON 字符串中受欢迎的子字符串

标签 javascript json

我是 JSON 新手,但已阅读过一些网络教程(例如 http://www.copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it/ )。在我网站的一个页面上,我生成了一组缩略图并通过 json 对其进行编码,如下所示:

<?php //lots of code
$sqlTh = mysqli_query($cxn, "SELECT thumb FROM video WHERE status = 'active'");
$jsonTh = array();
while ($row = mysqli_fetch_assoc($sqlTh)){ 
    $jsonTh[] = json_encode(array($row));
}
?>

然后我声明全局 varthumbs 并使用 document.ready(function () 调用我的缩略图加载函数:

<script type="text/javascript">
var thumbs = '<?php echo json_encode($jsonTh) ?>';
</script>
<script type="text/javascript">
$(document).ready(function () {
    loadThumbs();
});
</script>

函数 loadThumbs() 在外部文件中...可以警告 JSON 字符串并显示其长度,如下所示:

function loadThumbs() {
    alert(thumbs); //No problem
    alert(thumbs.length); //No problem
}

我可以看到 JSON 字符串...警报输出如下所示:

["[{"thumb":"thumbnail1.jpg"}"]", etc , etc , etc }"]"]
1756 //(string length)

现在我想做的就是查看字符串/数组的每个成员......我已尝试警告以下内容:

function loadThumbs() {
    alert(thumbs[2].thumb);
}

但警报输出是“未定义”。然后我尝试了使用 for 循环遍历数组并为数组的每个成员设置一个变量的解决方案:

function loadThumbs() {
    for (var i = 0, len = thumbs.length; i < len; i++) {
       var th = thumbs[i];
       alert(th);
    }
} 

但是,这会警告数组的所有 1756 个字符,而不是每个 .jpg 文件名。将函数稍微更改为以下内容不会发出任何警报(根本没有警报框):

function loadThumbs() {
    for (var i = 0, len = thumbs.length; i < len; i++) {
       var th = thumbs[i].thumb;
       alert(th);
    }
} 

我知道一种解决方案是在 JSON 字符串上使用 js split() 函数,但我想知道在不使用 split() 函数的情况下哪里出错了。有人可以解释一下吗?我将不胜感激任何帮助...谢谢!

最佳答案

我不是 PHP 专家,但从你的代码中我看到你正在创建一个 JSON 编码字符串数组,每一行一个,然后你对整个数组进行 JSON 编码,所以你得到的输出就是你想要的应该期待。

此外,您忘记在 javascript 端对字符串进行 JSON 解码。

尝试将您的代码更改为:

<?php //lots of code
$sqlTh = mysqli_query($cxn, "SELECT thumb FROM video WHERE status = 'active'");
$jsonTh = array();

while ($row = mysqli_fetch_assoc($sqlTh)){ 

    $jsonTh[] = array($row);     //don't encode each row!!

}
?>

<script type="text/javascript">


$(document).ready(function () {
    //use JSON.parse to re-decode on the javascript side
    var thumbs = JSON.parse('<?php echo json_encode($jsonTh) ?>');    

    for (var i = 0, len = thumbs.length; i < len; i++) {
       var th = thumbs[i].thumb;
       alert(th);
    }
} 

</script>

正如您所期望的那样,您应该会收到所有大拇指的提醒。 请注意,如果拇指属性预计包含撇号,则您也必须在 js 端对它们进行转义。

关于javascript - 我可以提取字符,但不能提取 JSON 字符串中受欢迎的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605541/

相关文章:

javascript - 延迟加载 javascript 以获取 Google 页面见解

javascript - 如何在 Vue 3 中替换 this.$parent.$emit?

javascript - 更改数组的键名中的对象

javascript - 从 JSON 获取对象

ruby-on-rails - 在 Ruby 中查询 JSON 嵌套哈希响应时出现问题

javascript - 现在有哪些浏览器支持 window.postMessage 调用?

javascript - 如果按下按钮或按下 Enter 按钮 Jquery

javascript - IWebBrowser2 似乎没有执行 javascript

ios - JSON 很好地进入字典,但 objectForKey 错误

python - 参数化包含 JSON 正文的 python POST 请求