2015-03-11 2 views
1

Я проанализировал все свои данные, используя GSON, за исключением того, что это дало мне проблемы.Pasring jira json using GSON

У меня есть JSON данные, такие как (для выпуска Java POJO):

"issue": { 
    "id": "44544", 
    "self": "http://jira.webaroo.com/rest/api/2/issue/44544", 
    "key": "BIZSOL-166", 
    "fields": { 
     "summary": "Jira Wrapper Implementation - Test", 
     "issuetype": { 
      "self": "http://jira.webaroo.com/rest/api/2/issuetype/2", 
      "id": "2", 
      "description": "A new feature of the product, which has yet to be developed.", 
      "iconUrl": "http://jira.webaroo.com/images/icons/issuetypes/newfeature.png", 
      "name": "New Feature", 
      "subtask": false 
     }, 
     "votes": { 
      "self": "http://jira.webaroo.com/rest/api/2/issue/BIZSOL-166/votes", 
      "votes": 0, 
      "hasVoted": false 
     }, 
     "resolution": null, 
     "fixVersions": [], 
     "resolutiondate": null, 
     "customfield_11101": null 
    } 
} 

У меня есть класс Java, как Issue.java:

protected String key; 
protected String summary; 
protected IssueType issuetype; 
protected Votes votes; 
protected Resolution resolution; 
protected List<FixVersions> fixVersions; 
protected Date resolutiondate; 

Я смог получить значение ключа от преобразования GSON ,

Но я не могу получить другие данные.

Я знаю, что его не происходит, потому что они являются частью структуры «полей», но я не хочу определять структуру «полей» в моей java.

Я прямо хочу получить одноуровневые значения.

Пожалуйста, помогите мне в достижении этого, используя GSON. Я довольно новичок в GSON.

+0

Внедрение пользовательского десериализатора. См. Это для примера: http://stackoverflow.com/questions/6096940/how-do-i-write-a-custom-json-deserializer-for-gson – filip26

+0

afaik вам не нужна полная структура, но моя Знания GSON довольно ограничены. вы можете начать с использования полей 'Map ' и использовать getter, который пересекает эту карту в вашем классе Issue. например 'getSummary()' будет вызывать 'getFields(). get (" summary ")'. – meistermeier

+0

@ filip26 не существует в любом случае, чтобы сделать это без написания десериализатора? – Abubakkar

ответ

0

Может быть, немного поздно, но для WIT

можно разобрать JSON в объект JSON, а затем получить элементы по имени ключа.

public static void main(String[] args) throws FileNotFoundException { 
Gson gson = new Gson(); 
JsonParser prser = new JsonParser(); 
JsonReader file = new JsonReader(new FileReader("./file.txt")); 
JsonObject result = prser.parse(file).getAsJsonObject(); 
System.out.println(result.get("issue").getAsJsonObject().get("id")); 
System.out.println(result.get("issue").getAsJsonObject().get("key")); 
System.out.println(result.get("issue").getAsJsonObject().get("fields").getAsJsonObject().get("votes") 
    .getAsJsonObject().get("self")); 
} 

результат будет:

"44544"

"BIZSOL-166"

"http://jira.webaroo.com/rest/api/2/issue/BIZSOL-166/votes"

единственное, что вы должны быть уход за вложенными ключами ... пример: ID ребенок из выпуска, так что вы должны будете получить первое, что родитель и перемещаться глубоко, пока не найдете нужный элемент

Вы можете точно определить набор как:

Set<Map.Entry<String, JsonElement>> entrySet = result.entrySet();