使用gson解析JSON对象

时间:2014-02-01 20:22:27

标签: android json gson

我正在尝试解析JSON,如:

{"response":[123123, 1231231, 123124, 124124, 111111, 12314]}

使用GSON,制作

Gson gson = new GsonBuilder().create();
int[] friends = new Gson().fromJson(answer, int[].class);
System.out.print(friends[0]);

但是得到Error Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

如何在数组中解析这些数字?

7 个答案:

答案 0 :(得分:10)

您首先要创建一个模型类,GSON可以将您的json绑定到:

public class ResponseModel {

    private List<Integer> response = new ArrayList<Integer>();

    public List<Integer> getResponse() {
        return response;
    }

    @Override
    public String toString() {
        return "ResponseModel [response=" + response + "]";
    }
}

然后你可以打电话

Gson gson = new Gson();
ResponseModel responseModel = gson.fromJson("{\"response\":[123123, 1231231, 123124, 124124, 111111, 12314]}",
                                            ResponseModel.class);
List <Integer> responses = responseModel.getResponse();
// ... do something with the int list

答案 1 :(得分:7)

使用包装器类之外的另一个选项就是从解析树中获取数组。

使用JsonParser创建树,从中获取数组,然后使用int[]转换为Gson

public class App 
{
    public static void main( String[] args ) throws IOException
    {
       String json = "{\"response\":[1,2,3,4,5]}";

       JsonObject jo = new JsonParser().parse(json).getAsJsonObject();
       JsonArray jsonArray = jo.getAsJsonArray("response");

       int[] myArray = new Gson().fromJson(jsonArray, int[].class);

       System.out.println(Arrays.toString(myArray));

    }
}

请注意,您也可以直接使用JsonArray,而不是根据您的使用情况将其转换为int[]

System.out.println(jsonArray.get(0).getAsInt());

答案 2 :(得分:1)

试试这个方法

String json1 = "[{\"contactName\":\"3\",\"contactNumber\":\"3\"},{\"contactName\":\"4\",\"contactNumber\":\"4\"}]";

JsonElement json = new JsonParser().parse(json1);    
JsonArray array= json.getAsJsonArray();    
Iterator iterator = array.iterator();    
List<ContactDetail> details = new ArrayList<ContactDetail>();

while(iterator.hasNext()){
    JsonElement json2 = (JsonElement)iterator.next();
    Gson gson = new Gson();
    ContactDetail contact = gson.fromJson(json2, ContactDetail.class);
    //can set some values in contact, if required 
    details.add(contact);
}

我有另一种表格here

答案 3 :(得分:0)

Json值有一个对象作为响应,它包含一个整数数组。您必须首先正确定义其类:

class ResponseHolder {
    private Integer[] response;
}

class ResponseHolder {
    private int[] response;
}

class ResponseHolder {
    private String[] response;
}

然后在将json值解析为java实例时使用该类:

ResponseHolder responseHolder = gson.fromJson(answer, ResponseHolder.class);

答案 4 :(得分:0)

BEGIN_ARRAY但是BEGIN_OBJECT意味着在开头它的对象不是数组。如果您将在Json中看到,响应属性是对象的类型,该对象还包含该数组。您可以使用不同方式解析它使用创建自己的自定义模型类或不创建自定义模型类。如果你不想创建你的Response Model类,那么只需解析它

final Type typeOf = new TypeToken<Map<String, List<Integer>>>() {}.getType();
final Map<String, List<Integer>> map = new Gson().fromJson(Your_JSON_String, typeOf);

// finally get list of ints form map.
final List<Integer> listOfIntegers =map.get("response");

答案 5 :(得分:0)

Kotlin溶液

val myResponse = Gson().fromJson(responseStr, MyResponse::class.java)

答案 6 :(得分:-2)

或者使用Android中包含的org.json:

JSONObject jsonData = new JSONObject(answer);
JSONArray jsonItems = jsonData.getJSONArray("response");