json_encode - 格式化问题?

时间:2014-11-10 01:10:07

标签: php json

我要求输出看起来像这样:

Response
{
    error_num: 0
    error_details:
    [
        {
            "zipcode": 98119
        },
        {
            "zipcode": 98101
        }
    ]
}

这个值与此示例无关。

我的代码如下所示:

$returndata = array('error_num' => $error_code);
$returndata['error_details'] = $error_msg;

$temp_data = array();
$temp_value = '';
foreach ($zipcodes_array as $value) {
    //$temp_data['zipcode'] = $value;
    //$temp_value .= json_encode($temp_data);
    $temp_value .= '{"zipcode":$value},';
}
//$returndata['test'] = $temp_value;
$returndata['zipcodes'] = $temp_value;
echo json_encode($returndata);

我的输出取决于我的不同尝试(你可以看到注释掉的东西)但基本上,我不明白第3部分(带有zipcodes的部分)没有键或定义在第一个开放括号“[”

之前

以下是上述代码的输出:

{"error_num":0,"error_details":"","zipcodes":"{\"zipcode\":11111},{\"zipcode\":11112},{\"zipcode\":11113},{\"zipcode\":22222},{\"zipcode\":33333},{\"zipcode\":77325},{\"zipcode\":77338},{\"zipcode\":77339},{\"zipcode\":77345},{\"zipcode\":77346},{\"zipcode\":77347},{\"zipcode\":77396},{\"zipcode\":81501},{\"zipcode\":81502},{\"zipcode\":81503},{\"zipcode\":81504},{\"zipcode\":81505},{\"zipcode\":81506},{\"zipcode\":81507},{\"zipcode\":81508},{\"zipcode\":81509},"}

显然我没有显示填充/创建的变量,因为它是通过MySQL。价值观无关紧要。它的输出格式我试图下降。我不明白他们是如何拥有“zipcode”的:在另一个看似使用JSON_ENCODE的部分的{}括号之间的部分

它很接近,但看看它是如何仍然有“zipcodes”:在那里定义这些值所在的键是什么?我的问题是,上面的“响应”是由合作伙伴实际以JSON_ENCODE格式请求的吗?或者它是否采用某些自定义格式,我只需使用PHP的任何json功能即可完成?我可以很容易地写出来,但根据它在上面的示例中看起来的方式(响应)我认为它是使用JSON_ENCODE。

另外,它一直把它放在“不对的前面。我知道它可能就是这样,因为我是json_encode的字符串。希望你看到我正在尝试做什么

如果这只是类似JSON的自定义内容,我道歉。我试过问伙伴,但我想我不是在问正确的问题(或者是正确的人)。他们似乎永远无法给我答案。

编辑:注意我的输出中也没有任何[或]。但我的一些测试JSON_ENCODE内容中包含了一些内容。我敢肯定,只是我在这里失败了,我无法弄明白。

2 个答案:

答案 0 :(得分:1)

如果您希望输出看起来像问题顶部的JSON输出,请编写如下代码:

$returndata = array('error_num' => $error_code);
$returndata['error_details'] = array();

foreach ($zipcodes_array as $value) {
    $returndata['error_details'][] = array('zipcode' => (int)$value);
}
echo 'Response ' . json_encode($returndata);

这将返回格式,如上所述。

Response
{
    error_num: 0
    error_details:
    [
        {
             "zipcode": 98119
        },
        {
             "zipcode": 98101
        }
    ]
}

答案 1 :(得分:1)

您可以使用单个ZipCode对象作为关联数组,将所有小型ZipCode对象推送到ZipCodes数组并编码整个数据结构。这是代码示例:

$returndata = array(
    'error_num'     => $error_code,
    'error_details' => array()
);

foreach ($zipcodes_array as $value) {
    $returndata['error_details'][] = array('zipcode' => $value);
}
echo json_encode($returndata);