this からJSON出力を取得したい this 。残念ながら、json_encode()関数は配列をその形式にエンコードしません。何も戻ってこない。これが私のコードです。`
$output = array(
'responseData' => array(),
'responseDetails' => null,
'responseStatus' => 200
);
$x = 0;
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $k => $v) {
$output['responseData']['result'][$x][$k] = $v;
}
$x++;
}
print_r($output);
header('Content-Type: application/json');
echo json_encode($output , JSON_FORCE_OBJECT);
理由がわかりません。誰かが私が解決策を見つけるのを手伝ってください。
編集:ごめんなさい。ここに出力があります-
期待されるJSON出力-
{
"responseData": {
"results": [{
"qid": 1,
"qtitle": "When do we finish this project ?",
"qimage_url": "http://www.wearesliit.com/example.png",
"user": "samith",
"date": "2016-01-01T02:15:12.356Z",
"type": 1,
"category": 5,
"tags": ["common_senese", "truth", "bazsa_awsanna"],
"note": "Sample quetion"
}, {}, {}]
},
"responseDetails": null,
"responseStatus": 200 }
JSON出力がまったく得られません。しかし、これが配列のprint_rの結果です。
Array(
[responseData] => Array
(
[result] => Array
(
[0] => Array
(
[question_ID] => 1
[question_Title] => Which shape does not belong with the other three shapes?
[question_Image_URL] => http://www.wearesliit.com/images/quiz/questions/1.jpg
[quetion_Note] => Easy IQ question.
[category_ID] => 7
[username] => samith
[added] => 2017-01-29 21:50:52
)
[1] => Array
(
[question_ID] => 2
[question_Title] => Tim earns $10 per hour at his job. When he gets paid on Friday, he is paid for 40 hours of work. He then goes out and spends 10% of his earnings on entertainment that weekend. How much money is he left with on Monday?
[question_Image_URL] =>
[quetion_Note] => Easy IQ question.
[category_ID] => 7
[username] => samith
[added] => 2017-01-29 21:50:52
)
)
)
[responseDetails] =>
[responseStatus] => 200 )
@awiebeのおかげで、正確なエラーが見つかりました。それは
不正な形式のUTF-8文字、おそらく正しくエンコードされていない
みなさん、ありがとうございました。別の質問から解決策を見つけました。 'Laravelで'不正なUTF-8文字、おそらく正しくエンコードされていません '
json_encode()関数は、エンコードが失敗し、「false」の結果がエコーまたは出力に表示されない場合に「false」を返します。参照: http://php.net/manual/en/function.json-encode.php このような問題を処理する最良の方法は、json_last_error_msg()メソッドを使用し、に従ってアクションを実行することです。エラーが見つかりました。参照: http://php.net/manual/en/function.json-last-error-msg.php 。例は次のとおりです。
$show_json = json_encode($output , JSON_FORCE_OBJECT);
if ( json_last_error_msg()=="Malformed UTF-8 characters, possibly incorrectly encoded" ) {
$show_json = json_encode($API_array, JSON_PARTIAL_OUTPUT_ON_ERROR );
}
if ( $show_json !== false ) {
echo($show_json);
} else {
die("json_encode fail: " . json_last_error_msg());
}
問題がエンコード文字である場合、それは表示されません。文字が作業に不可欠ではないことを願うか、ジガジリオンの文字列リストで不一致の入力を見つけた場合は、それを修正してください。他のタイプのエラーはここで見つけることができます: http://php.net/manual/en/json.constants.php 。見つけたエラーに対してifステートメントと修正を適用するだけです。
これが誰かに役立つことを願っています。
削除する
header('Content-Type: application/json');
通常のHTMLタグ、ファイル内の空白行、またはPHPのいずれかによって、実際の出力を送信する前に、header()を呼び出す必要があることに注意してください。 include、require、関数、または別のファイルアクセス関数を使用してコードを読み取り、header()が呼び出される前にスペースまたは空の行が出力されることは非常に一般的なエラーです。単一のPHP/HTMLファイルを使用する場合にも同じ問題が存在します。
およびJSON_FORCE_OBJECT
から
echo json_encode($output , JSON_FORCE_OBJECT);
この問題について、 link で紹介したいと思います。次のようなjson_encodeラッパーを使用することをお勧めします。
function safe_json_encode($value){
if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
$encoded = json_encode($value, JSON_PRETTY_PRINT);
} else {
$encoded = json_encode($value);
}
switch (json_last_error()) {
case JSON_ERROR_NONE:
return $encoded;
case JSON_ERROR_DEPTH:
return 'Maximum stack depth exceeded'; // or trigger_error() or throw new Exception()
case JSON_ERROR_STATE_MISMATCH:
return 'Underflow or the modes mismatch'; // or trigger_error() or throw new Exception()
case JSON_ERROR_CTRL_CHAR:
return 'Unexpected control character found';
case JSON_ERROR_SYNTAX:
return 'Syntax error, malformed JSON'; // or trigger_error() or throw new Exception()
case JSON_ERROR_UTF8:
$clean = utf8ize($value);
return safe_json_encode($clean);
default:
return 'Unknown error'; // or trigger_error() or throw new
Exception();
}
}
function utf8ize($mixed) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} else if (is_string ($mixed)) {
return utf8_encode($mixed);
}
return $mixed;
}
そして、これらの関数を定義した後、直接使用できます。
echo safe_json_encode($response);