0

私は次のJsonを持っています

{
   "messages":[
      {
         "message":{
            "body":"Foo",
            "username":"XYZ"
         }
      },
      {
         "message":{
            "body":"HI",
            "username":"ABC"
         }
      }
   ],
   "response":{
      "status":200
   },
   "more":true
}

カスタム クラスを作成します。私のコンテナ クラス Result は、ステータスとブール値を含む List オブジェクトと Response オブジェクトを保持します。

public class Message { 

  @SerializedName("body") 
  public String body; 

  @SerializedName("username") 
  public String username; 

  @Override public String toString() { 
    return "Message{" + "body=" + body + ", username=" + username + '}'; 
  } 
}

public class Response { 
  public int status; 
} 

public class SearchResponseST { 
  @SerializedName("messages") 
  public Message[] messages; 
  public Response response; 
  public boolean more;
}

私のメインクラスでは、次のことを行います。

SearchResponseST response = 
   gson.fromJson(reader, SearchResponseST.class); Message[] results = response.messages; 

「メッセージ」を削除して配列を直接開始すると、Gson を使用して正常に逆シリアル化できます。

現在の構造でどのように解析する必要がありますか?

4

2 に答える 2

0

私はGsonを使用していないため、これはあなたの質問に直接答えることはありません。私は常に org.json.simple パッケージを使用して JSSON を解析してきました。ここでそれについて読むことができます: http://www.mkyong.com/java/json-simple-example-read-and-write-json/ JSON をパーサーに投げ込むだけで、必要なデータを取得できます。HashMap (JSONObject の場合) または ArrayList (JSONArray の場合) にアクセスする場合と同様に、データにアクセスします。

解析コードで編集:

    JSONParser parser = new JSONParser();
    JSONObject obj = (JSONObject) parser.parse(new FileReader("file.txt"));
    JSONArray array = (JSONArray) obj.get("messages");
    for (Object o : array) {
      JSONObject jo =(JSONObject)o;
      JSONObject messageObject = (JSONObject)jo.get("message");
      System.out.println(messageObject.get("body"));
      System.out.println(messageObject.get("username"));
    }
于 2012-06-01T17:05:19.150 に答える
0

このような JSON の場合

 {
       "messages":
        [
          {"body": "Foo", "username": "XYZ"   },
          {"body": "HI",  "username": "ABC"  }

        ],
        "response": {"status": 200 },
        "more": true
    }

次のように設計されたコンテナオブジェクトを試してください

Container { List<Message> messages;Response response;boolean more;}

しかし、投稿した JSON の場合、Container オブジェクトは

Container { public HashMap[] messages;  public boolean more;    public Response response; }
于 2012-06-01T17:09:18.570 に答える