2013-03-29 95 views
1

請我有一個JSON響應字符串是這樣的:GSON JSON無法得到的結果

{"result":{"id":21456,"name":"3mm nail","type":"2" }} 

,這是我的代碼:

class rootObj{ 
    List<Result> result; 

} 
public class Result { 
    @SerializedName("id") 
    public String idItem; 

    @SerializedName("name") 
    public String name;  
} 
public static void main(String[] args) throws Exception { 
Gson gson = new Gson(); 
Result result = gson.fromJson(json,Result.class); 
System.out.println(result.name); 
} 

但結果是無效:( 在THX 。提前

所以..這個代碼就是我的目標是:

class ResultData{ 

    private Result result; 
    public class Result { 
     private String id; 
     private String name; 

    } 

} 


... 
Gson gson = new Gson(); 
ResultData resultData = new Gson().fromJson(json, ResultData.class); 

System.out.println(resultData.result.id); 
System.out.println(resultData.result.name); 

Thx to BalusC給了我關於它的想法。 Java - Gson parsing nested within nested

+2

我不知道Gson,但有兩件事情跳出來:1.你要求它把一個數字('id')當作一個字符串。那是故意的嗎? Gson會自動做到這一點嗎? 2.你還沒有映射'type'屬性,Gson對遺漏屬性感到滿意嗎? –

+0

這個id真的如此,關於我現在編輯它的類型是正確的。 – AlfaTango

+0

在你的Result類中你沒有聲明「type」對象? – Lakshmi

回答

2

在你的JSON字符串中,你的結果屬性是一個對象而不是數組。因此,爲了使其與您的兩個Java類工作(rootObj和結果),你需要加方括號[]在你的大括號{} 原始

{"result":{"id":21456,"name":"3mm nail","type":"2" }} 

{"result":[{"id":21456,"name":"3mm nail","type":"2" }]} 

此代碼的工作對我來說:

import static org.junit.Assert.assertEquals; 

import java.util.List; 

import org.junit.Test; 

import com.google.gson.Gson; 
import com.google.gson.annotations.SerializedName; 

public class TestGson { 
    private static final String NAME = "3mm nail"; 

    @Test 
    public void testList() { 
     final String json = "{\"result\":[{\"id\":21456,\"name\":\"" + NAME + "\",\"type\":\"2\" }]}"; 
     Gson gson = new Gson(); 
     ListWrapper wrapper = gson.fromJson(json, ListWrapper.class); 
     assertEquals(NAME, wrapper.result.get(0).name); 
    } 

    static class ListWrapper { 
     List<Result> result; 
    } 

    static class ObjectWrapper { 
     Result result; 
    } 

    static class Result { 
     @SerializedName("id") 
     public int idItem; 

     @SerializedName("name") 
     public String name; 
    } 

} 
0

參考this ..它解釋如何解析json不使用GSON