2016-03-31 19 views
0

php/jsonでWebサービスを使いこなしています。PHP WebサービスJSONエンコーディング

<?php 
    $answer = array('status'=>401, 'answer'=>''); 


    if($numWeeks%2 == 0) { 
     $answer['answer'] = 'trash'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = 200; 
    } 
    else { 
     $answer['answer'] = 'trach/recycle'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = 200; 
    } 

    header('Content-type: application/json'); 
    echo json_encode($answer); 
?> 

出力:

{"status":200,"answer":"trash"} 

私もRETROFIT(V1.9)を使用してAndroidアプリでこれを読んしようとしています。

public class TrashResponse { 

    public int status; 
    public String answer; 


} 

しかし、私はこのエラーを取得:

マイオブジェクトクラスがある

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 

私の研究から、それは私のWebサービスからの私のJSONオブジェクトに関係しています。私は問題点を指摘することはできません。

答えて

0

ご使用のTrashResponseクラスステータスは文字列型ですが、jsonの値は整数型です。それを修正して、それが機能するかどうか再度確認してください。

+0

それは動作しませんでした:(私はまだ同じエラーが発生します...私はint型に変更して動作していません –

+0

あなたはそれがUTF8ではないjsonエンコーディングと関係していると思いますか? –

0

は、文字列としてのステータスを変更することで、サーバー側のコード

<?php 
    $answer = array('status'=> "401", 'answer'=>''); 


    if($numWeeks%2 == 0) { 
     $answer['answer'] = 'trash'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = "200"; 
    } 
    else { 
     $answer['answer'] = 'trach/recycle'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = "200"; 
    } 

    header('Content-type: application/json'); 
    echo json_encode($answer); 
?> 

にすることができますこの問題を解決するには、2つの方法があります

OR

あなたは、Android側で変更することができます

アンドロイド側の変更を改善する

0

私が使用していたサーバーには、古いバージョンのPHPがあります。更新されたバージョンの別のサーバーに切り替えて、次のコードを追加しました:

header('Content-type: application/json'); 
echo json_encode($answer, JSON_FORCE_OBJECT); 

これは有効なJSONオブジェクトを返しました。もともと、JSONオブジェクトは文字列として認識されていたため、JSONは無効です。

関連する問題