无法从Twitter地理编码中检索地点坐标

时间:2016-02-05 14:30:09

标签: java json twitter jackson

我遇到了一个问题,我的逻辑无法从twitter Feed中检索JSON数组中的前两个坐标。我正在使用Jackson JsonNode来检索Twitter提要。

下面是我首先验证节点不为空的逻辑,如果它不为null,那么我尝试从平面检索前两个lon / lat坐标。

问题是它永远无法检索转推的坐标 - >地方 - > Bounding_box - >坐标 - >获得0 0&得到0 1

源代码逻辑

        "place": {
        "id": "5a110d312052166f",
        "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/5a110d312052166f.json",
        "place_type": "city",
        "name": "San Francisco",
        "full_name": "San Francisco, CA",
        "country_code": "US",
        "country": "United States",
        "bounding_box": {
            "type": "Polygon",
            "coordinates": [
                [
                    [-122.514926, 37.708075],
                    [-122.514926, 37.833238],
                    [-122.357031, 37.833238],
                    [-122.357031, 37.708075]
                ]
            ]
        },
        "attributes": {}
    },

我想尝试检索bounding_box数组中的前两个地理代码

 {  
   "created_at":"Fri Feb 05 01:36:27 +0000 2016",
   "id":695420692209111000,
   "id_str":"695420692209111040",
   "text":"RT @Sayhop: When your boyfriend doesn't watch your show  #RealFansGetIt X1 @XFINITY #ad https://t.co/E4H3zO92nV",
   "source":"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
   "truncated":false,
   "in_reply_to_status_id":null,
   "in_reply_to_status_id_str":null,
   "in_reply_to_user_id":null,
   "in_reply_to_user_id_str":null,
   "in_reply_to_screen_name":null,
   "user":{  
      "id":278162142,
      "id_str":"278162142",
      "name":"Alexeia  ♡",
      "screen_name":"_vievelv_",
      "location":null,
      "url":null,
      "description":"Itty Bitty ❤️",
      "protected":false,
      "verified":false,
      "followers_count":1571,
      "friends_count":1246,
      "listed_count":0,
      "favourites_count":344,
      "statuses_count":21194,
      "created_at":"Wed Apr 06 18:46:36 +0000 2011",
      "utc_offset":-18000,
      "time_zone":"Eastern Time (US & Canada)",
      "geo_enabled":true,
      "lang":"en",
      "contributors_enabled":false,
      "is_translator":false,
      "profile_background_color":"642D8B",
      "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/656263432/w1zrzuisccmzjk0qhv5h.jpeg",
      "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/656263432/w1zrzuisccmzjk0qhv5h.jpeg",
      "profile_background_tile":true,
      "profile_link_color":"FF00EE",
      "profile_sidebar_border_color":"65B0DA",
      "profile_sidebar_fill_color":"7AC3EE",
      "profile_text_color":"3D1957",
      "profile_use_background_image":true,
      "profile_image_url":"http://pbs.twimg.com/profile_images/652259214774128640/O8LDMd8c_normal.jpg",
      "profile_image_url_https":"https://pbs.twimg.com/profile_images/652259214774128640/O8LDMd8c_normal.jpg",
      "profile_banner_url":"https://pbs.twimg.com/profile_banners/278162142/1441077378",
      "default_profile":false,
      "default_profile_image":false,
      "following":null,
      "follow_request_sent":null,
      "notifications":null
   },
   "geo":null,
   "coordinates":null,
   "place":null,
   "contributors":null,
   "retweeted_status":{  
      "created_at":"Fri Jan 22 20:19:36 +0000 2016",
      "id":690629910960799700,
      "id_str":"690629910960799744",
      "text":"When your boyfriend doesn't watch your show  #RealFansGetIt X1 @XFINITY #ad https://t.co/E4H3zO92nV",
      "source":"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
      "truncated":false,
      "in_reply_to_status_id":null,
      "in_reply_to_status_id_str":null,
      "in_reply_to_user_id":null,
      "in_reply_to_user_id_str":null,
      "in_reply_to_screen_name":null,
      "user":{  
         "id":25011208,
         "id_str":"25011208",
         "name":"Sara Hopkins",
         "screen_name":"Sayhop",
         "location":"Atlanta, GA",
         "url":"http://shortyawards.com/8th/sayhop",
         "description":"never bored || TV host/social media creator ⭐️⭐️⭐️⭐️⭐️ IG/snapchat: sayhop",
         "protected":false,
         "verified":true,
         "followers_count":50761,
         "friends_count":998,
         "listed_count":98,
         "favourites_count":13178,
         "statuses_count":4231,
         "created_at":"Wed Mar 18 02:31:51 +0000 2009",
         "utc_offset":-18000,
         "time_zone":"Eastern Time (US & Canada)",
         "geo_enabled":true,
         "lang":"en",
         "contributors_enabled":false,
         "is_translator":false,
         "profile_background_color":"000000",
         "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/260784476/Twitter1.jpg",
         "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/260784476/Twitter1.jpg",
         "profile_background_tile":false,
         "profile_link_color":"51D4C2",
         "profile_sidebar_border_color":"DBCFAD",
         "profile_sidebar_fill_color":"0F0E0B",
         "profile_text_color":"AD4C9E",
         "profile_use_background_image":true,
         "profile_image_url":"http://pbs.twimg.com/profile_images/688163946512007168/CRqMjOgp_normal.jpg",
         "profile_image_url_https":"https://pbs.twimg.com/profile_images/688163946512007168/CRqMjOgp_normal.jpg",
         "profile_banner_url":"https://pbs.twimg.com/profile_banners/25011208/1414548876",
         "default_profile":false,
         "default_profile_image":false,
         "following":null,
         "follow_request_sent":null,
         "notifications":null
      },
      "geo":null,
      "coordinates":null,
      "place":{  
         "id":"5a110d312052166f",
         "url":"https://api.twitter.com/1.1/geo/id/5a110d312052166f.json",
         "place_type":"city",
         "name":"San Francisco",
         "full_name":"San Francisco, CA",
         "country_code":"US",
         "country":"United States",
         "bounding_box":{  
            "type":"Polygon",
            "coordinates":[  
               [  
                  [  
                     -122.514926,
                     37.708075
                  ],
                  [  
                     -122.514926,
                     37.833238
                  ],
                  [  
                     -122.357031,
                     37.833238
                  ],
                  [  
                     -122.357031,
                     37.708075
                  ]
               ]
            ]
         },
         "attributes":{  

         }
      },
      "contributors":null,
      "is_quote_status":false,
      "retweet_count":4276,
      "favorite_count":14129,
      "entities":{  
         "hashtags":[  
            {  
               "text":"RealFansGetIt",
               "indices":[  
                  45,
                  59
               ]
            },
            {  
               "text":"ad",
               "indices":[  
                  72,
                  75
               ]
            }
         ],
         "urls":[  

         ],
         "user_mentions":[  
            {  
               "screen_name":"XFINITY",
               "name":"XFINITY",
               "id":14996251,
               "id_str":"14996251",
               "indices":[  
                  63,
                  71
               ]
            }
         ],
         "symbols":[  

         ],
         "media":[  
            {  
               "id":690629837333999600,
               "id_str":"690629837333999617",
               "indices":[  
                  76,
                  99
               ],
               "media_url":"http://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
               "media_url_https":"https://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
               "url":"https://t.co/E4H3zO92nV",
               "display_url":"pic.twitter.com/E4H3zO92nV",
               "expanded_url":"http://twitter.com/Sayhop/status/690629910960799744/video/1",
               "type":"photo",
               "sizes":{  
                  "thumb":{  
                     "w":150,
                     "h":150,
                     "resize":"crop"
                  },
                  "medium":{  
                     "w":600,
                     "h":338,
                     "resize":"fit"
                  },
                  "small":{  
                     "w":340,
                     "h":191,
                     "resize":"fit"
                  },
                  "large":{  
                     "w":1024,
                     "h":576,
                     "resize":"fit"
                  }
               }
            }
         ]
      },
      "extended_entities":{  
         "media":[  
            {  
               "id":690629837333999600,
               "id_str":"690629837333999617",
               "indices":[  
                  76,
                  99
               ],
               "media_url":"http://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
               "media_url_https":"https://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
               "url":"https://t.co/E4H3zO92nV",
               "display_url":"pic.twitter.com/E4H3zO92nV",
               "expanded_url":"http://twitter.com/Sayhop/status/690629910960799744/video/1",
               "type":"video",
               "sizes":{  
                  "thumb":{  
                     "w":150,
                     "h":150,
                     "resize":"crop"
                  },
                  "medium":{  
                     "w":600,
                     "h":338,
                     "resize":"fit"
                  },
                  "small":{  
                     "w":340,
                     "h":191,
                     "resize":"fit"
                  },
                  "large":{  
                     "w":1024,
                     "h":576,
                     "resize":"fit"
                  }
               },
               "video_info":{  
                  "aspect_ratio":[  
                     16,
                     9
                  ],
                  "duration_millis":11233,
                  "variants":[  
                     {  
                        "bitrate":2176000,
                        "content_type":"video/mp4",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/1280x720/OY7P8akLAqM_C2J1.mp4"
                     },
                     {  
                        "bitrate":320000,
                        "content_type":"video/mp4",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/320x180/HlqkHHrC7SK6cgR8.mp4"
                     },
                     {  
                        "bitrate":832000,
                        "content_type":"video/webm",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/640x360/FfLYyLagrUn8VGgy.webm"
                     },
                     {  
                        "bitrate":832000,
                        "content_type":"video/mp4",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/640x360/FfLYyLagrUn8VGgy.mp4"
                     },
                     {  
                        "content_type":"application/x-mpegURL",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/pl/cXSu_jFCOj5Wcte5.m3u8"
                     },
                     {  
                        "content_type":"application/dash+xml",
                        "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/pl/cXSu_jFCOj5Wcte5.mpd"
                     }
                  ]
               }
            }
         ]
      },
      "favorited":false,
      "retweeted":false,
      "possibly_sensitive":false,
      "filter_level":"low",
      "lang":"en"
   },
   "is_quote_status":false,
   "retweet_count":0,
   "favorite_count":0,
   "entities":{  
      "hashtags":[  
         {  
            "text":"RealFansGetIt",
            "indices":[  
               57,
               71
            ]
         },
         {  
            "text":"ad",
            "indices":[  
               84,
               87
            ]
         }
      ],
      "urls":[  

      ],
      "user_mentions":[  
         {  
            "screen_name":"Sayhop",
            "name":"Sara Hopkins",
            "id":25011208,
            "id_str":"25011208",
            "indices":[  
               3,
               10
            ]
         },
         {  
            "screen_name":"XFINITY",
            "name":"XFINITY",
            "id":14996251,
            "id_str":"14996251",
            "indices":[  
               75,
               83
            ]
         }
      ],
      "symbols":[  

      ],
      "media":[  
         {  
            "id":690629837333999600,
            "id_str":"690629837333999617",
            "indices":[  
               88,
               111
            ],
            "media_url":"http://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
            "media_url_https":"https://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
            "url":"https://t.co/E4H3zO92nV",
            "display_url":"pic.twitter.com/E4H3zO92nV",
            "expanded_url":"http://twitter.com/Sayhop/status/690629910960799744/video/1",
            "type":"photo",
            "sizes":{  
               "thumb":{  
                  "w":150,
                  "h":150,
                  "resize":"crop"
               },
               "medium":{  
                  "w":600,
                  "h":338,
                  "resize":"fit"
               },
               "small":{  
                  "w":340,
                  "h":191,
                  "resize":"fit"
               },
               "large":{  
                  "w":1024,
                  "h":576,
                  "resize":"fit"
               }
            },
            "source_status_id":690629910960799700,
            "source_status_id_str":"690629910960799744",
            "source_user_id":25011208,
            "source_user_id_str":"25011208"
         }
      ]
   },
   "extended_entities":{  
      "media":[  
         {  
            "id":690629837333999600,
            "id_str":"690629837333999617",
            "indices":[  
               88,
               111
            ],
            "media_url":"http://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
            "media_url_https":"https://pbs.twimg.com/ext_tw_video_thumb/690629837333999617/pu/img/ofj5PsOGsynefono.jpg",
            "url":"https://t.co/E4H3zO92nV",
            "display_url":"pic.twitter.com/E4H3zO92nV",
            "expanded_url":"http://twitter.com/Sayhop/status/690629910960799744/video/1",
            "type":"video",
            "sizes":{  
               "thumb":{  
                  "w":150,
                  "h":150,
                  "resize":"crop"
               },
               "medium":{  
                  "w":600,
                  "h":338,
                  "resize":"fit"
               },
               "small":{  
                  "w":340,
                  "h":191,
                  "resize":"fit"
               },
               "large":{  
                  "w":1024,
                  "h":576,
                  "resize":"fit"
               }
            },
            "source_status_id":690629910960799700,
            "source_status_id_str":"690629910960799744",
            "source_user_id":25011208,
            "source_user_id_str":"25011208",
            "video_info":{  
               "aspect_ratio":[  
                  16,
                  9
               ],
               "duration_millis":11233,
               "variants":[  
                  {  
                     "bitrate":2176000,
                     "content_type":"video/mp4",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/1280x720/OY7P8akLAqM_C2J1.mp4"
                  },
                  {  
                     "bitrate":320000,
                     "content_type":"video/mp4",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/320x180/HlqkHHrC7SK6cgR8.mp4"
                  },
                  {  
                     "bitrate":832000,
                     "content_type":"video/webm",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/640x360/FfLYyLagrUn8VGgy.webm"
                  },
                  {  
                     "bitrate":832000,
                     "content_type":"video/mp4",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/vid/640x360/FfLYyLagrUn8VGgy.mp4"
                  },
                  {  
                     "content_type":"application/x-mpegURL",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/pl/cXSu_jFCOj5Wcte5.m3u8"
                  },
                  {  
                     "content_type":"application/dash+xml",
                     "url":"https://video.twimg.com/ext_tw_video/690629837333999617/pu/pl/cXSu_jFCOj5Wcte5.mpd"
                  }
               ]
            }
         }
      ]
   },
   "favorited":false,
   "retweeted":false,
   "possibly_sensitive":false,
   "filter_level":"low",
   "lang":"en",
   "timestamp_ms":"1454636187971"
}

示例JSON

{{1}}

2 个答案:

答案 0 :(得分:0)

我怀疑你的代码只需要为边界框处理一个额外的数组

请参阅https://dev.twitter.com/overview/api/places

  

坐标:Float数组Array数组

...

  

边界框数组包含在一个附加数组中,以与多边形表示法兼容。

答案 1 :(得分:0)

您需要调整访问元素的方式。我使用了您提供的JSON,将其存储在一个文件中,并使用了来自jackson-core@2.7.0的{​​{1}},jackson-annotation@2.7.0jackson-databind@2.7.0的广告集并将其导入我的项目build path在eclipse中为external jars

我将full_name的访问权限调整为:

//Get the full name 
String fullName = root.path("retweeted_status").path("place").path("full_name").asText(); 

并关注coordinates

//Get the coordinate array
JsonNode coordinates = root.path("retweeted_status").path("place").path("bounding_box").path("coordinates").get(0);

然后按如下方式访问整个坐标:

//print the whole array of array 
System.out.println(coordinates.toString());
//output: [[-122.514926,37.708075],[-122.514926,37.833238],[-122.357031,37.833238],[-122.357031,37.708075]]

要单独访问坐标,请按以下步骤操作:

//print individual arrays, where each is lat and long 
System.out.println(coordinates.get(0));
//output: [-122.514926,37.708075]
System.out.println(coordinates.get(1));
//output: [-122.514926,37.833238]
System.out.println(coordinates.get(2));
//output: [-122.357031,37.833238]
System.out.println(coordinates.get(3));
//output: [-122.357031,37.708075]

分别访问每个坐标latlong,然后执行以下操作:

//print lat and long of each array seperately
System.out.println(coordinates.get(0).get(0));
//output: -122.514926
System.out.println(coordinates.get(0).get(1));
//output: 37.708075 

System.out.println(coordinates.get(1).get(0));
System.out.println(coordinates.get(1).get(1));

System.out.println(coordinates.get(2).get(0));
System.out.println(coordinates.get(2).get(1));

System.out.println(coordinates.get(3).get(0));
System.out.println(coordinates.get(3).get(1));

以下是整个代码,我用于测试目的,从文件中读取JSON:

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonTest {
    public static void main(String[] args) throws JsonParseException, IOException {
        File file = new File("C:\\test_java\\jackson.json"); 

        ObjectMapper mapper = new ObjectMapper();

        JsonNode root = mapper.readTree(file);

        //Get the full name 
        String fullName = root.path("retweeted_status").path("place").path("full_name").asText(); 

        System.out.println("full_name: " + fullName);

        //Get the coordinate array
        JsonNode coordinates = root.path("retweeted_status").path("place").path("bounding_box").path("coordinates").get(0);

        //print the whole array of array 
        System.out.println(coordinates.toString());

        //print individual arrays, where each is lat and long 
        System.out.println(coordinates.get(0));
        System.out.println(coordinates.get(1));
        System.out.println(coordinates.get(2));
        System.out.println(coordinates.get(3));

        //print lat and long of each array seperately
        System.out.println(coordinates.get(0).get(0));
        System.out.println(coordinates.get(0).get(1));

        System.out.println(coordinates.get(1).get(0));
        System.out.println(coordinates.get(1).get(1));

        System.out.println(coordinates.get(2).get(0));
        System.out.println(coordinates.get(2).get(1));

        System.out.println(coordinates.get(3).get(0));
        System.out.println(coordinates.get(3).get(1));
    }
}

以下是运行时上述代码的输出:

  

full_name:加利福尼亚州旧金山

     

[[ - 122.514926,37.708075],[ - 122.514926,37.833238],[ - 122.357031,37.833238],[ - 122.357031,37.708075]] [-122.514926,37.708075] [-122.514926,37.833238]

     

[ - 122.357031,37.833238] [-122.357031,37.708075]

     

-122.514926

     

37.708075

     

-122.514926

     

37.833238

     

-122.357031

     

37.833238

     

-122.357031

     

37.708075