2016-08-15 63 views
0

我試圖讀取JSON URL中的值,但是我不知道如何繼續從列表中讀取數組中的值?下面你會發現我的POJO,Main和JSON代碼。非常感謝你的幫助Java; JSON;傑克遜;從JSON數組中檢索列表中的值

POJO:

package org.jcexchange.FBApp; 
import java.util.List; 
import org.jcexchange.FBApp.Details; 


public class Users { 
    private List<Details> Values; 

    public List<Details> getValues() { 
     return this.Values; 
    } 
    public void setValues(List<Details> Values) { 
     this.Values = Values; 
    } 
} 

public class Details { 
    private String user_name; 
    private String user_password; 
    private int age; 
    private String user_email; 

    public String getUserName() { 
     return this.user_name; 
    } 
    public void setUserName(String user_name) { 
     this.user_name = user_name; 
    } 

    public String getUserPassword() { 
     return this.user_password; 
    } 
    public void setUserPassword(String user_password) { 
     this.user_password = user_password; 
    } 

    public int getAge() { 
     return this.age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getUserEmail() { 
     return this.user_email; 
    } 
    public void setUserEmail(String user_email) { 
     this.user_email = user_email; 
    } 
} 

主營:

public class Main { 
    public static void main(String[] args) { 
     try { 
      URL jsonURL = new URL("https://jchtest.herokuapp.com/index.php?    
      PW=2"); 
      ObjectMapper mapper = new ObjectMapper(); 




     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, 
     false); 
     Users[] a1 = mapper.readValue(jsonURL, Users[].class); 
     } 
     catch (Exception e) { 
      throw new RuntimeException(e); 
     }  
    } 
} 

我能夠從一個web服務拉JSON,但是我卡試圖弄清楚我如何能夠從JSON數組的第一個「Values」索引中檢索user_name

JSON:

[ 
    { 
    "Values": { 
     "user_name": "jhart", 
     "user_password": "gooddeval1", 
     "age": 28, 
     "user_email": "heheh" 
    } 
    }, 
    { 
    "Values": { 
     "user_name": "bdole", 
     "user_password": "Passwordd", 
     "age": 82, 
     "user_email": "hahah" 
    } 
    } 
] 

回答

0

嗯,這裏有點混亂,可能是因爲我沒有完整的上下文。從反序列化器中你告訴我,我期望一個用戶數組,然後在每個用戶中我有一個「值」列表,但是JSON告訴我值是用戶的一個單數屬性。無論如何,這裏是一個以我所作假設爲基礎的樣本。這可以四處湊來更改集合和奇異性

import org.codehaus.jackson.annotate.JsonProperty; 

public class Users { 

    @JsonProperty("Values") 
    private Details Values; 

    public Details getValues() { 
     return this.Values; 
    } 

    public void setValues(Details Values) { 
     this.Values = Values; 
    } 
} 



import org.codehaus.jackson.annotate.JsonProperty; 

public class Details { 
@JsonProperty("user_name") 
private String user_name; 
@JsonProperty("user_password") 
private String user_password; 
@JsonProperty("age") 
private int age; 
@JsonProperty("user_email") 
private String user_email; 

public String getUserName() { 
    return this.user_name; 
} 

public void setUserName(String user_name) { 
    this.user_name = user_name; 
} 

public String getUserPassword() { 
    return this.user_password; 
} 

public void setUserPassword(String user_password) { 
    this.user_password = user_password; 
} 

public int getAge() { 
    return this.age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public String getUserEmail() { 
    return this.user_email; 
} 

public void setUserEmail(String user_email) { 
    this.user_email = user_email; 
} 

}

進口的java.net.URL;

import org.codehaus.jackson.map.ObjectMapper; 

public class Main { 
    public static void main(String[] args) { 
     try { 
      URL jsonURL = new URL("https://jchtest.herokuapp.com/index.php?PW=2"); 
      ObjectMapper mapper = new ObjectMapper(); 
      Users[] a1 = mapper.readValue(jsonURL, Users[].class); 
      System.out.println(a1[0].getValues().getUserName()); 

     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

這會爲我打印「jhart」。

請注意:您可以嘗試的一件事是基於數組/奇異屬性,您可以填充對象並將其寫爲JSON。通過這種方式,您可以找到Jackson Deserializer所期望的與我們實際提供的有什麼不同。

+0

非常感謝您的幫助,此工作!真的很感激它 –