构建JSON结构的问题

时间:2011-03-02 17:52:52

标签: php json

首先,我通过多个选择(HTML5)上传输入文件经过for循环的多个图像,但是当尝试输出JSON中的链接时,它只输出一个图像文件名即使我选择了2张以上的图片。

这就是我创建JSON(重要部分,而不是完整脚本)的方式:

$count = 0;
$image_count = count($_FILES['file']);

for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output = array();

    $output['url'] = 'http://www.mywebsite.com/images/' . $filename;
    $output['name'] = $filename;

    $count++;
}

if($count == $image_count)
{
   echo json_encode($output);
}

最终输出如下:

{
    "url": "http://www.mywebsite.com/images/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
}

当它应该有多个图像列出如下:

{
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "name": "nj23knk5k5455.jpg"
}

如果我这样做:

array_push($output, 'http://www.mywebsite.com/images/' . $filename);
array_push($output, $filename);

我得到这样的输出:

{
    "0": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "1": "0Z9O3a9q1k2A8.jpg",
    "2": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "3": "3jn5jk5n4kj5n.jpg",
    "4": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "5": "nj23knk5k5455.jpg",
}

我需要它与我需要的类似,所以我可以用jQuery解析它。

2 个答案:

答案 0 :(得分:1)

试试这个:

$output = array();
for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output[] = array(
        'url' => 'http://www.mywebsite.com/images/' . $filename,
        'name' => $filename
    );

    $count++;
}

使用$output[] = x,您可以向数组添加条目。输出如下:

[
  {
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
  },
  {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
  }
]

答案 1 :(得分:1)

您需要拥有一个正在使用的阵列。所以不要这样:

$output = array();

$output['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output['name'] = $filename;

你会想要这样的东西:

$output = array();

$output[]['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output[]['name'] = $filename;

这将为您提供输出,然后您可以在jquery中将其引用为:

success: function(response){
    response[0].name;
    response[0].url;
}

这有意义吗? jquery代码非常简略。