2012-04-14 7 views
0

私のWebサイトからJSONファイルを取得して解析しようとしています。これまでの運がない、残念ながら。 BaslikContainerという名前の別のクラスを使用してデータを取得することができましたが、別のクラスで動作させるにはこのコードが必要ですが、これはarraylistのBaslikインスタンスを必要とするため、削除する必要がありました。Java JSONでNULL値を返す

誰かがこの問題を指摘できますか?例外はスローされません - なぜこれが起こっているのか分かりません。

package info.funstein.TestHttpGet; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URI; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class TestHttpGet { 

    /** 
    * @param args 
    * @throws Exception 
    */ 
    public static void main(String[] args) throws Exception{ 
     BufferedReader in = null; 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(); 
     request.setURI(new URI("http://dev.funstein.info/baslik.json")); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader 
       (new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 
     in.close(); 
     String page = sb.toString(); 


     GsonBuilder gsonBuilder = new GsonBuilder(); 
     Gson gson = gsonBuilder.create(); 
     Basliklar basliklar = gson.fromJson(page, Basliklar.class); 
     System.out.println(basliklar); 

     } 
    } 
class Basliklar { 
    private List<Baslik> basliklar; 

    @Override 
    public String toString() { 
     return String.format("[Basliklar: %1$s]", basliklar); 
    } 
} 

class Baslik { 
    private String baslikAdi; 
    private String baslikAcan; 
    private int baslikID; 

    public String getBaslikAdi() { 
     return baslikAdi; 
    } 

    public void setBaslikAdi(String baslikAdi) { 
     this.baslikAdi = baslikAdi; 
    } 

    public String getBaslikAcan() { 
     return baslikAcan; 
    } 

    public void setBaslikAcan(String baslikAcan) { 
     this.baslikAcan = baslikAcan; 
    } 

    public int getBaslikID() { 
     return baslikID; 
    } 

    public void setBaslikID(int baslikID) { 
     this.baslikID = baslikID; 
    } 

    @Override 
    public String toString() { 
     return String.format("[Baslik: baslikAdi=%1$s, baslikAcan=%2$s, baslikID=%3$d]", 
       baslikAdi, baslikAcan, baslikID); 
    } 
} 

答えて

1

入力JSon文字列が間違っています。

使用Gson.toJson(Object) follwing方法

GsonBuilder gsonBuilder = new GsonBuilder(); 
Gson gson = gsonBuilder.create(); 
Basliklar b = new Basliklar(); 
b.basliklar = new ArrayList<Baslik>(); 
Baslik b1 = new Baslik(); 
b1.setBaslikAdi("Deneme1"); 
b1.setBaslikAcan("funstein"); 
b1.setBaslikID(0); 
b.basliklar.add(b1); 
Baslik b2 = new Baslik(); 
b2.setBaslikAdi("Deneme2"); 
b2.setBaslikAcan("qeremqazan"); 
b2.setBaslikID(1); 
b.basliklar.add(b2); 

LoggerFactory.getLogger(TestHttpGet.class).debug(gson.toJson(b)); 

は、次のJSON文字列を生成します。

{"basliklar":[{"baslikAdi":"Deneme1","baslikAcan":"funstein","baslikID":0},{"baslikAdi":"Deneme2","baslikAcan":"qeremqazan","baslikID":1}]} 

あなたのJSON入力文字列は次のとおりです。

{"basliklar":[{"baslik":{"baslikAdi":"Deneme1","baslikAcan":"funstein","baslikID":"0"}},{"baslik":{"baslikAdi":"Deneme2","baslikAcan":"qeremqazan","baslikID":"1"}}]} 

ある追加/予期しない「baslikがあります: "あなたの入力文字列の要素。

+0

ありがとうございます!それがトリックでした。 – funstein

+1

ありがとうございます。答えを受け入れ;-) – andih