Javascript 我可以提取字符,但不能提取JSON字符串的子字符串

Javascript 我可以提取字符,但不能提取JSON字符串的子字符串,javascript,json,Javascript,Json,我不熟悉JSON,但已经在web上阅读了一些教程(例如)。在我网站的一个页面上,我生成了一组缩略图,并通过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,但已经在web上阅读了一些教程(例如)。在我网站的一个页面上,我生成了一组缩略图,并通过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));
}
?>
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);
    }
} 
函数loadThumbs(){
对于(变量i=0,len=thumbs.length;i
但是,这会提醒数组的所有1756个字符,而不是每个.jpg文件名。将功能稍微更改为以下内容不会发出任何警报(根本没有警报框):

函数loadThumbs(){
对于(变量i=0,len=thumbs.length;i

我知道一个解决方案是在JSON字符串上使用js split()函数,但我想知道在不使用split()函数的情况下会出现什么问题。有人能解释一下吗?我将感谢任何帮助…谢谢

在您的示例中,您的语法不正确:

["[{"thumb":"thumbnail1.jpg"}"]", etc , etc , etc }"]"]
确保引用的是标识符和值的周围:

"thumb": "thumbnail1.jpg"
在你的例子中:

[[{"thumb":"thumbnail1.jpg"}], "etc" , "etc" , "etc" }]]
永远不要在大括号或方括号中加引号

不要这样做:“[”“]”或“{”“}”


祝JSON好运

我不是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>

我不会手动生成数组,也不会将引号放在任何地方。警报输出就是我写的。数组(设置为var thumbs)是从我的站点数据库的mysqli_查询生成的关联数组。换句话说,我写的是关联数组上的json_编码输出的内容。你没有对每一行进行编码是正确的……这是问题的一部分。但是,添加JSON.parse将JSON字符串更改为一系列成员,这些成员(字面上是)[object object],而不是“thumb”:“thumbnail.jpg”。我将继续处理这个问题。您将数组成员视为[object object],因为每个成员实际上都是一个对象,具有“thumb”属性。试着在浏览器上发布一条带有JSON摘录的注释,这样我就可以确认了。代码--alert(thumbs)--在浏览器上输出(作为警报框)---[object,object],--27次(其中27是正确的缩略图jpg文件数)。代码警报(thumbs[2].thumb)输出---未定义---。函数loadThumbs()位于外部javascript文件中(不确定这是否重要)。。。我的意思是:在浏览器中的html页面中,您将看到:“var thumbs=JSON.parse(“[what you get here?”);”。我要看看你在房间里得到了什么对不起,我误解了。我在浏览器中查看了源代码:var thumbs=JSON.parse(“[{”thumb:“http:\/\/img.youtube.com\/vi\/E3IzRqY2ko4\/1.jpg”}),“{”thumb:“http:\/\/img.youtube.com\/vi\/7jmKo7US0Kw\/1.jpg”}];我没有包括其他25名成员。
[[{"thumb":"thumbnail1.jpg"}], "etc" , "etc" , "etc" }]]
<?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>