2013-12-02 7 views
2

Я хотел бы разобрать данные из JSON, который является строковым типом. Я использую Google Gson. Я задаюсь вопросом, как я могу получить «OriginalTerm» и «FirstTranslation» информацию об этом Json Строка:Android - Parse JSON using GSON

{ 

     "term0" : { 
     "PrincipalTranslations" : { 
      "0" :{ 
       "OriginalTerm" : { "term" : "cat", "POS" : "n", "sense" : "domestic animal", "usage" : ""}, 
       "FirstTranslation" : {"term" : "gato", "POS" : "nm", "sense" : " "}, "Note" : ""}, 
      "1" :{ 
       "OriginalTerm" : { "term" : "cat", "POS" : "n", "sense" : "member of cat family", "usage" : ""}, 
       "FirstTranslation" : {"term" : "felino", "POS" : "nm", "sense" : "familia de animales"}, "Note" : ""}}, 
     "AdditionalTranslations" : { 
      "0" :{ 
       "OriginalTerm" : { "term" : "cat", "POS" : "n", "sense" : "guy", "usage" : "slang"}, 
       "FirstTranslation" : {"term" : "tío, tipo, chaval", "POS" : "nm", "sense" : "coloq"}, 
       "SecondTranslation" : {"term" : "vato", "POS" : "", "sense" : "Mex"}, "Note" : ""}, 

     "original" : { 
     "Compounds" : { 
      "0" :{ 
       "OriginalTerm" : { "term" : "alley cat", "POS" : "n", "sense" : "stray cat", "usage" : ""}, 
       "FirstTranslation" : {"term" : "gato callejero", "POS" : "nm", "sense" : ""}, "Note" : ""}, 
     "Lines" : "End Reached", "END" : true 

    }  

Я попытался следующие эту информацию, но я не могу решить:

http://albertattard.blogspot.com.es/2009/06/practical-example-of-gson.html

JSON parsing using Gson for Java

Я попытался выполнить сериализацию с использованием GSON, используя POJO, но я не могу найти нужную структуру, я также попытался использовать JsonObject, перепрыгнув через объектные ключи, такие как «term0», «PrincipalTranslations», но у меня есть некоторые проблемы, когда я Несколько результатов для одного и того же ключа, например:

"0" :{ 
      "OriginalTerm".... 
      "FirstTranslation"... 
     "1" :{ 
      "OriginalTerm".... 
      "FirstTranslation"... 
    } 

Благодарим за внимание.

+4

Что вы пробовали? С чем вы столкнулись? Покажите нам свой код. – SLaks

+0

Вам нужны все данные или только его часть? – giampaolo

+0

@SLaks Я попытался выполнить сериализацию объектов JSON с помощью POJO. Я тоже пытался использовать JsonObject, но у меня есть проблемы, когда у меня есть 2 ключа внутри «PrincipalTranslations» :( – galix85

ответ

3

Разбор JSON с Gson может быть выполнен с использованием POJO, который отображает один на один ваш JSON текст с вашим объектом. Но поскольку вам нужна только часть строки JSON, вы можете воспользоваться объектом JsonParser, который позволяет вам получить часть вашего JSON.

Таким образом, вы можете получить PrincipalTranslation часть, а затем применить стратегию учета POJO в виду, что у вас есть по крайней мере две структуры: ваш Term и композицию из двух Term с и примечание (что я назвал Item).

Имейте в виду, что POJO я пишу: не соответствует Соглашение об именовании Java, поэтому вы можете добавить annotation, чтобы использовать другое имя переменной-члена.

Вот код, который вы можете вставить и запустить в своем IDE, чтобы попробовать.

package stackoverflow.questions; 

import java.lang.reflect.Type; 
import java.util.*; 

import com.google.gson.*; 
import com.google.gson.reflect.TypeToken; 

public class Q20337652 { 

    public static class Term { 
     String term; 
     String POS; 
     String sense; 
     String usage; 

     @Override 
     public String toString() { 
     return "Term [term=" + term + ", POS=" + POS + ", sense=" + sense + ", usage=" + usage + "]"; 
     } 


    } 

    public static class Item { 
     Term OriginalTerm; 
     Term FirstTranslation; 
     String Note; 

     @Override 
     public String toString() { 
     return "Item [OriginalTerm=" + OriginalTerm + ", FirstTranslation=" + FirstTranslation + ", Note=" + Note + "]"; 
     } 


    } 



    public static void main(String[] args){ 

      String json =                                 
    " {                                 "+ 
    "                                  "+ 
    "  \"term0\" : {                             "+ 
    "  \"PrincipalTranslations\" : {                         "+ 
    "   \"0\" :{                              "+ 
    "    \"OriginalTerm\" : { \"term\" : \"cat\", \"POS\" : \"n\", \"sense\" : \"domestic animal\", \"usage\" : \"\"},   "+ 
    "    \"FirstTranslation\" : {\"term\" : \"gato\", \"POS\" : \"nm\", \"sense\" : \" \"}, \"Note\" : \"\"},     "+ 
    "   \"1\" :{                              "+ 
    "    \"OriginalTerm\" : { \"term\" : \"cat\", \"POS\" : \"n\", \"sense\" : \"member of cat family\", \"usage\" : \"\"},  "+ 
    "    \"FirstTranslation\" : {\"term\" : \"felino\", \"POS\" : \"nm\", \"sense\" : \"familia de animales\"}, \"Note\" : \"\"}},"+ 
    "  \"AdditionalTranslations\" : {                         "+ 
    "   \"0\" :{                              "+ 
    "    \"OriginalTerm\" : { \"term\" : \"cat\", \"POS\" : \"n\", \"sense\" : \"guy\", \"usage\" : \"slang\"},     "+ 
    "    \"FirstTranslation\" : {\"term\" : \"tío, tipo, chaval\", \"POS\" : \"nm\", \"sense\" : \"coloq\"},      "+ 
    "    \"SecondTranslation\" : {\"term\" : \"vato\", \"POS\" : \"\", \"sense\" : \"Mex\"}, \"Note\" : \"\"},     "+ 
    "                                  "+ 
    "  \"original\" : {                             "+ 
    "  \"Compounds\" : {                            "+ 
    "   \"0\" :{                              "+ 
    "    \"OriginalTerm\" : { \"term\" : \"alley cat\", \"POS\" : \"n\", \"sense\" : \"stray cat\", \"usage\" : \"\"},   "+ 
    "    \"FirstTranslation\" : {\"term\" : \"gato callejero\", \"POS\" : \"nm\", \"sense\" : \"\"}, \"Note\" : \"\"},   "+ 
    "  \"Lines\" : \"End Reached\", \"END\" : true                      "+ 
    "                                  "+ 
    " }                                 "+ 
    " }  }}}                                "; 
     JsonParser jp = new JsonParser(); 
     JsonElement je = jp.parse(json); 
     JsonElement je2 = je.getAsJsonObject().get("term0"); 
     JsonElement je3 = je2.getAsJsonObject().get("PrincipalTranslations"); 

     Type mapType = new TypeToken<Map<String, Item>>() {}.getType(); 

     Map<String, Item> principalTranslation = new Gson().fromJson(je3, mapType); 

     System.out.println(principalTranslation); 


    } 

} 

И это мое исполнение:

{0=Item [OriginalTerm=Term [term=cat, POS=n, sense=domestic animal, usage=], FirstTranslation=Term [term=gato, POS=nm, sense= , usage=null], Note=], 
1=Item [OriginalTerm=Term [term=cat, POS=n, sense=member of cat family, usage=], FirstTranslation=Term [term=felino, POS=nm, sense=familia de animales, usage=null], Note=]} 
+0

Спасибо @giampaolo наконец, добавить несколько строку более для хранения информации в ArrayList: '// Список объектов упорствовать List firstTranslationList = новый ArrayList (); List originalTermList = новый ArrayList (); Список list = new ArrayList (mainTranslation.values ​​()); для (элемент позиции: список) { \t \t firstTranslationList.add (item.FirstTranslation); \t \t оригиналTermList.add (item.OriginalTerm); \t} ' Еще раз спасибо :) – galix85

+0

Рад, что вы решили. – giampaolo

2

Я думаю, что это может помочь: http://www.newthinktank.com/2013/07/android-development-15/

Это видео-учебник объясняя, как использовать JSON. Однако не через GSON, но я думаю, что вам нужна база для того, как JSON работает, прежде чем участвовать в GSON (это довольно сложно).

+0

Спасибо. Я пробовал что-то подобное, проблема заключалась в том, что я нашел список JSONObjects, таких как «PrincipalTranslations», у него есть 2 ключа, как я разбираю его как JsonObject? – galix85