json 使用Retrofit从自动完成Google Places API获取数据

ujv3wf0j  于 2023-02-20  发布在  Go
关注(0)|答案(1)|浏览(123)

我阅读了很多教程(因为这是我第一次使用Retrofit和Google Places API),我注意到了创建POJO类的模式,这样Retrofit就可以将JSON响应数据Map到POJO。是否可以创建只包含部分字段的POJO,或者在创建POJO时必须包含JSON响应中的每个字段?例如,如果我有这样JSON响应结构(取自Google Places Autocomplete API):

{
  "status": "OK",
  "predictions" : [
      {
         "description" : "Paris, France",
         "id" : "691b237b0322f28988f3ce03e321ff72a12167fd",
         "matched_substrings" : [
            {
               "length" : 5,
               "offset" : 0
            }
         ],
         "place_id" : "ChIJD7fiBh9u5kcRYJSMaMOCCwQ",
         "reference" : "CjQlAAAA_KB6EEceSTfkteSSF6U0pvumHCoLUboRcDlAH05N1pZJLmOQbYmboEi0SwXBSoI2EhAhj249tFDCVh4R-PXZkPK8GhTBmp_6_lWljaf1joVs1SH2ttB_tw",
         "terms" : [
            {
               "offset" : 0,
               "value" : "Paris"
            },
            {
               "offset" : 7,
               "value" : "France"
            }
         ],
         "types" : [ "locality", "political", "geocode" ]
      },
  ...additional results ...
}

显然,我需要一个类来保存statuspredictions的值:

public class Result
{
    String status;

    @SerializedName("predictions")
    List<Prediction> predictionList;
}

然后对于Prediction类,我可以有如下成员:

public class Prediction
{
    String description;
    String id;

    @SerializedName("place_id")
    String placeID;

    String reference;
    List<String> types;
}

但是我是否需要为matched_substringsterms包含单独的对象(即创建单独的类),即使我不打算使用这些值?
我的第二个问题是,我如何才能只获得JSON响应字符串,以便我可以使用Gson自己解析它。这将有助于避免为大型JSON响应创建一堆类。我只是好奇,以防我想这样做。谢谢。

e4eetjau

e4eetjau1#

//您可以忽略未知键,就像下面有趣的GooglePredictionsResponse(字符串:字符串):Google预测响应= Json {忽略未知密钥= true }.解码自字符串(字符串)

//bstrings
@Serializable
data class GooglePredictionsResponse(
    val predictions: List<GooglePrediction>
)

@Serializable
data class StructuredFormating(
    @SerialName("main_text")
    val mainText: String,
    @SerialName("secondary_text")
    val secondaryText: String
)

@Serializable
data class GooglePrediction(
    val place_id: String,
    @SerialName("structured_formatting")
    val structuredFormating: StructuredFormating
)

相关问题