Java:正确的类型迭代
我从Google Maps获得了此JSON,并成功地将其转换为GSON对象:Java:正确的类型迭代,java,android,json,Java,Android,Json,我从Google Maps获得了此JSON,并成功地将其转换为GSON对象: { "long_name" : "1", "short_name" : "1", "types" : [ "street_number" ] }, { "long_name" : "ABC Street", "short_name" : "ABC Street",
{
"long_name" : "1",
"short_name" : "1",
"types" : [ "street_number" ]
},
{
"long_name" : "ABC Street",
"short_name" : "ABC Street",
"types" : [ "route" ]
},
{
"long_name" : "ABC Town",
"short_name" : "ABC",
"types" : [ "locality", "political" ]
},
{
"long_name" : "ABC Area",
"short_name" : "ABCA",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "ABC L",
"short_name" : "ABCL",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Country",
"short_name" : "CT",
"types" : [ "country", "political" ]
},
{
"long_name" : "1234",
"short_name" : "1234",
"types" : [ "postal_code" ]
}
我现在应该如何遍历我的类型?我需要将街道、街道号和城镇分别保存在自己的字段中。我唯一想到的是这个,但在我看来不太好:
class address_component{
public String long_name;
public String short_name;
public String[] types;
}
当然,还可以通过每个地址组件进行循环。如何才能做得更好?类型数组中的每个数组都有一个或两个记录长,您只需要查找三种数据类型。在您的方法中有一些浪费的工作,但是当前形式的
包含(String)
不会浪费太多的工作,因为数字太小了
避免不必要工作的一个明显方法是在找到街道后停止进一步的contains(“street”)
检查,对于其他字段也是如此。这可能是一个简单的额外条件:
if (types.contains("street_number")) {
street_number = short_name
} else if (types.contains("route")) {
street = short_name
}
你没有发布足够的代码来说明你在做什么。我看到了两个潜在的问题,它们的成本比您所问的if-contains-else-if-contains部分要大得多
中断
迭代并跳过更多的地址类型您应该使用for循环来迭代。。。我不知道你想完成什么,或者你是如何做到的。。。完整的代码会很好,所以我知道您是如何尝试存储值的。您将这些字段保存到哪里?对于每个
address\u组件
您都有一个类型数组,您需要如何处理这些类型?更多的上下文会有所帮助。没什么特别的,我没有一个地址对象,包括,fields street,street number,city,country等等。嗯,street number,street等等并不总是以相同的顺序排列。我需要通过检查types数组来知道哪些JSON对象是street、street number等。根据文档,您的方法没有错。地理编码api不会为每个输入返回相同的结果,因此检查字段是否存在而不是假设字段是正确的。只需在JSONArray上使用for循环,并首先检查类型。如果值匹配,则抓取外部JSON对象。感谢您的回答!好吧,看来我的方法并不像我想的那么糟糕。感谢空检查的想法,这是一个更好的表现。1。我实际上是通过GSON创建一个对象,我只是在需要的字段上迭代。两个人。我的代码确实每次都加载整个JSON,但它没有那么长。。。流式方法不会很困难,因为我再也不能创建GJSON对象了。三个人。这是谷歌地图API,据我所知,它不起作用。。。
if (street_number == null && types.contains("street_number")) {
street_number = short_name
} else if (street == null && types.contains("route")) {
street = short_name
}