2013-03-29 4 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

Я не знаю Гсона, но выпрыгивают две вещи: 1. Вы просите его обрабатывать число ('id') как строку. Это намеренно? Будет ли это делать автоматически? 2. Вы не сопоставили свойство 'type', является ли Gson счастливым с отсутствием свойств? –

+0

id действительно так, о типе, который я только что редактировал сейчас, является правильным. – AlfaTango

+0

В вашем классе Result вы не объявили объект типа? – Lakshmi

ответ

2

В вашей строке JSON ваше свойство result является объектом, а не массивом. Таким образом, чтобы заставить его работать с двумя классами 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

Смежные вопросы