Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有一个while循环,其中我想将PHP转换为有效的json_Php_Encode_Json - Fatal编程技术网

我有一个while循环,其中我想将PHP转换为有效的json

我有一个while循环,其中我想将PHP转换为有效的json,php,encode,json,Php,Encode,Json,我的while循环是: 我试着插入json_decode和json_encode,并且每一个都没有插入另一个,但没有成功。我不断收到错误JSON.parse:JSON数据后出现意外的非空白字符 我知道json\u encode必须在while循环之外,但不知道如何做到这一点。 感谢您的帮助。谢谢。您所引用的特定错误(JSON.parse:JSON数据后意外的非空白字符)是Javascript解码时出现的 json_encode从混合值参数返回字符串 您需要echo输出结果,或者将其添加到另一个变

我的while循环是:
我试着插入
json_decode
json_encode
,并且每一个都没有插入另一个,但没有成功。我不断收到错误JSON.parse:JSON数据后出现意外的非空白字符

我知道
json\u encode
必须在while循环之外,但不知道如何做到这一点。

感谢您的帮助。谢谢。

您所引用的特定错误(JSON.parse:JSON数据后意外的非空白字符)是Javascript解码时出现的

json_encode
从混合值参数返回字符串

您需要
echo
输出结果,或者将其添加到另一个变量中,以便稍后输出。 例如

如果您试图对多行进行编码并将其全部返回,那么最好将
$result
添加到数组中,并在
之外对其进行编码,而如果不这样做,则JSON字符串可能如下所示:

{gold:123,silver:456,bronze:789}{gold:987,silver:654,bronze:321}
这不是有效的JSON,因为它一次只能解析一个对象或数组。下面是一个有效的JSON字符串

[{gold:123,silver:456,bronze:789},{gold:987,silver:654,bronze:321}]
这是数据的数组表示形式,将解析为JSON编码对象的列表。下面是您的代码,它使用数组在回显JSON之前存储JSON

$results = array();
while ($row = $res->fetchRow()){
    $resGold = $row['gold'];
    $resSilver = $row['silver'];
    $resBronze = $row['bronze'];
    $resGdp = $row['gdp'];
    $resPopulation = $row['population'];
    $resCountry = $row['country_name'];
    $gold_score = ($resGold * $gold_value);
    $silver_score = ($resSilver * $silver_value);
    $bronze_score = ($resBronze * $bronze_value);
    $score_pop = (($gold_score + $silver_score + $bronze_score)/$resPopulation);
    $score_gdp = (($gold_score + $silver_score + $bronze_score)/$resGdp);
    if($population == 'true'){ 
        $result = $res->fetchRow();
        $result['score'] = "$score_pop";
        array_push($results,$result);
    }
    else if($gdp == 'true'){ 
        $result = $res->fetchRow(); 
        $result['score'] = "$score_gdp"; 
        array_push($results,$result);
    }
}
if($population == 'false' && $gdp == 'false'){
    echo "Please select either population or gdp from view.htm";
}
else
{
    //Note: This is in the 'else' statement as echoing the JSON then that string
    //      will also cause errors as it ends up not being valid JSON anymore
    echo json_encode($results);
}

正如在我上面的示例中,您正在回显有关选择人口或GDP的字符串,因为这不是JSON编码的,并且上面的部分将以JSON编码,所以在尝试解码时可能会出现解析错误。如果此PHP页面旨在返回JSON编码的数据,而您的错误消息不是JSON编码的,则很可能在获取值时遇到问题。

您试图编码什么?您没有提供此类信息。@CurtisCrewe我想对
$result
进行编码,如上面的代码所示。当
json_encode
在while循环中时,我会得到空白错误,但是当我把它放在外部时,我只得到1个(最后一个)结果,而不是所有结果。
[{gold:123,silver:456,bronze:789},{gold:987,silver:654,bronze:321}]
$results = array();
while ($row = $res->fetchRow()){
    $resGold = $row['gold'];
    $resSilver = $row['silver'];
    $resBronze = $row['bronze'];
    $resGdp = $row['gdp'];
    $resPopulation = $row['population'];
    $resCountry = $row['country_name'];
    $gold_score = ($resGold * $gold_value);
    $silver_score = ($resSilver * $silver_value);
    $bronze_score = ($resBronze * $bronze_value);
    $score_pop = (($gold_score + $silver_score + $bronze_score)/$resPopulation);
    $score_gdp = (($gold_score + $silver_score + $bronze_score)/$resGdp);
    if($population == 'true'){ 
        $result = $res->fetchRow();
        $result['score'] = "$score_pop";
        array_push($results,$result);
    }
    else if($gdp == 'true'){ 
        $result = $res->fetchRow(); 
        $result['score'] = "$score_gdp"; 
        array_push($results,$result);
    }
}
if($population == 'false' && $gdp == 'false'){
    echo "Please select either population or gdp from view.htm";
}
else
{
    //Note: This is in the 'else' statement as echoing the JSON then that string
    //      will also cause errors as it ends up not being valid JSON anymore
    echo json_encode($results);
}