用 Gson 解析 JSON

该示例显示了使用 GoogleGson 库解析 JSON 对象。

解析对象:

class Robot {
    //OPTIONAL - this annotation allows for the key to be different from the field name, and can be omitted if key and field name are same . Also this is good coding practice as it decouple your variable names with server keys name 
    @SerializedName("version") 
    private String version;

    @SerializedName("age")
    private int age;
    
    @SerializedName("robotName")
    private String name;
    
    // optional : Benefit it allows to set default values and retain them, even if key is missing from Json response. Not required for primitive data types. 

    public Robot{
       version = "";
       name = "";
    }

}

然后,在需要进行解析的地方,使用以下命令:

String robotJson = "{
                        \"version\": \"JellyBean\",
                        \"age\": 3,
                        \"robotName\": \"Droid\"
                   }";

Gson gson = new Gson();
Robot robot = gson.fromJson(robotJson, Robot.class);

解析清单:

检索 JSON 对象列表时,通常需要解析它们并将它们转换为 Java 对象。

我们将尝试转换的 JSON 字符串如下:

{
  "owned_dogs": [
    {
      "name": "Ron",
      "age": 12,
      "breed": "terrier"
    },
    {
      "name": "Bob",
      "age": 4,
      "breed": "bulldog"
    },
    {
      "name": "Johny",
      "age": 3,
      "breed": "golden retriever"
    }
  ]
}

此特定 JSON 数组包含三个对象。在我们的 Java 代码中,我们要将这些对象映射到 Dog 对象。Dog 对象看起来像这样:

private class Dog {
    public String name;
    public int age;

    @SerializedName("breed")
    public String breedName;
}

要将 JSON 数组转换为 Dog[]

Dog[] arrayOfDogs = gson.fromJson(jsonArrayString, Dog[].class);

Dog[] 转换为 JSON 字符串:

String jsonArray = gson.toJson(arrayOfDogs, Dog[].class);

要将 JSON 数组转换为 ArrayList<Dog>,我们可以执行以下操作:

Type typeListOfDogs = new TypeToken<List<Dog>>(){}.getType();
List<Dog> listOfDogs = gson.fromJson(jsonArrayString, typeListOfDogs);

Type 对象 typeListOfDogs 定义了 Dog 对象的列表。GSON 可以使用此类型对象将 JSON 数组映射到正确的值。

或者,可以以类似的方式将 List<Dog> 转换为 JSON 阵列。

String jsonArray = gson.toJson(listOfDogs, typeListOfDogs);