2017-08-12 88 views
-1

我想分析Json这种格式:如何使用Java获得instagram追随者列表?

{"data": { 
    "user": { 
    "edge_follow": { 
     "count": 2554, "page_info": { 
     "node": { 
      "id": "5719761315", "username": "disneyangell" ... 
     "node": { 
      "id": "2260368333", "username": "moosa_sedaghat",... 
     "node": { 
      "id": "3982701506", "username": "alidadashi512", ... 
     . 
     . 
     . 

从这个link; 我得到了我pojo从www.jsonschema2pojo.org/ 的I试图GsonConverter和杰克逊ObjectMapper

问题解析对象的节点列表是空的,或者它始终为零。 如何解决这个问题? 如果我需要使用CustomConverter写这个案例。

回答

1

所以得到你想要的,你必须到instagiam要记录的JSON。否则,您将在获取请求返回的JSON中获得一个空的“边缘”对象。如果您在此处记录是一个例子与GSON做到这一点:

的POJO(也许你需要添加getter方法你感兴趣的领域):

public class FollowJson{ 
    Data data; 
    String status; 

    public ArrayList<FollowNode> getFollowNodes(){ 
     return data.getFollowNodes(); 
    } 

    class Data{ 
     User user; 

     public ArrayList<FollowNode> getFollowNodes(){ 
      return user.getFollowNodes(); 
     } 
    } 

    class User{ 
     EdgeFollow edge_follow; 

     public ArrayList<FollowNode> getFollowNodes(){ 
      return edge_follow.getFollowNodes(); 
     } 

    } 

    class EdgeFollow{ 
     Integer count; 
     ArrayList<OuterNode> edges; 
     HashMap<String, Object> page_info; 

     public ArrayList<FollowNode> getFollowNodes(){ 
      ArrayList<FollowNode> bufList = new ArrayList<FollowNode>(); 
      for(OuterNode outer : edges){ 
       bufList.add(outer.getNode()); 
      } 
      return bufList; 
     } 

    } 

    class OuterNode{ 
     FollowNode node; 

     public FollowNode getNode(){ 
      return node; 
     } 

    } 

    class FollowNode { 
     Boolean followed_by_viewer; 
     String full_name; 
     String id; 
     Boolean is_verified; 
     String profile_pic_url; 
     Boolean requested_by_viewer; 
     String username; 

     public Boolean getFollowedStatus(){ 
      return followed_by_user; 
     } 

     public String getId(){ 
      return id; 
     } 

     public String getUsername(){ 
      return username; 
     } 
    } 

} 

然后通过POJO.class和JSON字符串到方法:

public <T> T getJsonFromString(String jsonString, Class<T> var){ 
    GsonBuilder builder = new GsonBuilder(); 
    return builder.create().fromJson(jsonString, var); 
} 

可以再调用getFollowNodes()返回的对象,它返回对象的表示在JSON的“节点”的阵列(FollowNode)上。

+0

感谢我没有检查响应主体。但现在如何使用okhttp获取该json?我的意思是如何设置cookie或... – Mehrad

+0

我从来没有与okhttp一起工作,但一般来说,你可以使用java.net.CookieManager来处理cookie。您从响应头中获取cookie,例如通过向https://www.instagram.com/accounts/login/发送获取请求。然后,您发送一个发布请求到上面的链接与cookie,参数(用户名和密码)和必要的请求标题。您可以使用浏览器的开发人员工具来检查帖子标题包含的内容(如:“主机”,“csrftoken”,...)。 – TheDude

+0

我在浏览器的Http头中找到了cookie,它正在工作......再次感谢:) – Mehrad

相关问题