0

このようなサーバーからの応答を解析しようとしています

public class TestClass {
public class TaskResponse {

        private String id;
        private List<String> links;
        public String getId(){

            return id;

            }  
      }

public static void main(String args[]){


       String response = "{
 "task": {
  "id": 10, 
  "links": [
   {
    "href": "http://localhost:9000/v1/115e4ad38aef463e8f99991baad1f809/os-hosts/svs144/onboard/10"
   }
  ]
 }
}";

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(response).getAsJsonObject();
Gson gson = new Gson();
TaskResponse tskResponse = gson.fromJson(response, TaskResponse.class);
String taskId = tskResponse.getId();
System.out.println("The task Id is "+taskId);

}

}

私が最初にやっていることでは、タスクIDをnullとして取得しますが、問題を理解しようとするために上に書いたこのコードでも、Eclipseは文字列応答でエラーを出し、それが適切な文字列であることを認識しません。応答文字列はサーバーから送信されているため、変更できないことに注意してください。エラーを整理するためのあらゆる種類のヘルプまたはリンクをいただければ幸いです。事前にサンクス。

4

2 に答える 2

1

Gson は、JSON 文字列をクラスの構造に一致させようとします。

JSON は で始まるため、 classtask : { ... }のプロパティを見つけようとします。そのようなフィールドがないため、インスタンスには何も設定されません。taskTaskResponse

したがって、より一般的に変換するか (ターゲットとして使用するなど)、プロパティをラッパー クラスにMap.class追加します。task

class TaskResponse {
    private Task task;
}

class Task {
    private Long id;
    private List<Link> links;
}

class Link {
    String href;
}

この回答で詳述されている 3 番目のオプションもあります。

于 2013-10-28T11:39:24.790 に答える
1

文字列内 " は直接使用できません

\" に置き換えてエスケープする必要があります。

" ===> \"

String response = "{
 \"task\": {
  \"id\": 10, 
  \"links\": [
   {
    \"href\": \"http://`localhost`:9000/v1/115e4ad38aef463e8f99991baad1f809/os-hosts/svs144/onboard/10\"
   }
  ]
 }
}";
于 2013-10-28T10:54:26.313 に答える