【问题标题】:ANDROID JSON Retrieve specific value of json dataANDROID JSON 检索 json 数据的具体值
【发布时间】:2016-09-03 06:31:01
【问题描述】:

我想检索administrative_area_level_1 值作为状态,locality 值作为区域,formatted_address 值作为地址以供进一步使用。我使用谷歌地图 api,我在其中给出纬度和经度,它将返回包含我想要的数据的 json 对象。

以下是我用来检索包含我想要的部分结果的数据的 url 示例。

http://maps.google.com/maps/api/geocode/json?latlng=1.56406166666667,103.626493333333&sensor=true

    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "Jalan Cengal",
                   "short_name" : "Jalan Cengal",
                   "types" : [ "route" ]
                },
                {
                   "long_name" : "Johor Bahru",
                   "short_name" : "Johor Bahru",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Johor",
                   "short_name" : "Johor",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "Malaysia",
                   "short_name" : "MY",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "80990",
                   "short_name" : "80990",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Jalan Cengal, 80990 Johor Bahru, Johor, Malaysia",
......

所以起初这是我检索我想要的数据的编码。

private void extractPosition(JSONObject json)
{
    JSONObject result = json.optJSONArray("results").optJSONObject(0);
    JSONArray address_components = result.optJSONArray("address_components");

    area.setText(address_components.optJSONObject(1).optString("short_name"));

    state.setText(address_components.optJSONObject(2).optString("short_name"));

    address.setText(result.optString("formatted_address"));
}

但后来我意识到位置并不总是相同,因为某些坐标具有如下所示的附加信息,因此我不能依赖数据的位置。

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Jalan Kebudayaan 11",
               "short_name" : "Jalan Kebudayaan 11",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Taman Universiti",
               "short_name" : "Taman Universiti",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Skudai",
               "short_name" : "Skudai",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Johor",
               "short_name" : "Johor",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Malaysia",
               "short_name" : "MY",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "81300",
               "short_name" : "81300",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Jalan Kebudayaan 11, Taman Universiti, 81300 Skudai, Johor, Malaysia",
.....

我应该如何修改我的编码以便检索administrative_area_level_1locality 值?

【问题讨论】:

    标签: java android json google-maps-api-3


    【解决方案1】:
    private void extractPosition(JSONObject json)
    {
        JSONObject result = json.optJSONArray("results").optJSONObject(0);
        JSONArray address_components = result.optJSONArray("address_components");
    
        for (int i =0; i<address_components.lenght;i++){
    
          if(address_components.optJSONObject(1).optString("short_name").equals("locality"))
            area.setText(address_components.optJSONObject(1).optString("short_name"));
    
          if (address_components.optJSONObject(1).optString("short_name").equals("administrative_area_level_1"))
            state.setText(address_components.optJSONObject(2).optString("short_name"));
    
          address.setText(result.optString("formatted_address"));
    }
    }
    

    【讨论】:

      【解决方案2】:
      private void extractPosition(JSONObject json)
          {
              JSONObject result = json.optJSONArray("results").optJSONObject(0);
              JSONArray address_components = result.optJSONArray("address_components");
      
              for (int i =0; i<address_components.length();i++)
              {
                  String searchKeyword;
      
                  searchKeyword = address_components.optJSONObject(i).optString("types");
                  Log.d("test", searchKeyword);
      
                  if (searchKeyword.contains("locality"))
                  {
                      area.setText(address_components.optJSONObject(i).optString("short_name"));
                  }
      
                  if (searchKeyword.contains("administrative_area_level_1"))
                  {
                      state.setText(address_components.optJSONObject(i).optString("short_name"));
                  }
              }
      
              address.setText(result.optString("formatted_address"));
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多