2013-05-13 109 views
1

我是初学者Java和Gson用户,并且能够将其应用于我的需求。我现在有我需要解析为一个微调一些JSON数据如下:使用Gson解析动态JSON数据

{ 
    "lang":[ 
     "arabic", 
     "bengali", 
     "dutch-utf8", 
     "eng_root", 
     "english", 
     "english-utf8", 
     ... 
    ], 
    "themes":{ 
     "blue":{ 
      "chinese_ibm500":1, 
      "spanish":1, 
      "bengali":1, 
      "japanese":1, 
      "english":1, 
      "russian":1, 
      "french-utf8":1, 
      "eng_root":1, 
      "arabic":1, 
      "spanish-utf8":1, 
      "portuguese":1, 
      ... 
     }, 
     "green":{ 
      "eng_root":1, 
      "engmonsoon":1, 
      "english":1 
      ... 
     }, 
     "red":{ 
      "chinese_ibm500":1, 
      "spanish":1, 
      "bengali":1, 
      ... 
     } 
    } 
} 
从这个JSON

所以,我需要两两件事:

1)浪下的数组是动态的,作为其语言安装在服务器上。我怎么能得到所有的条目?

我有一个类,但即时通讯坚持以我应该做如下理解我1 I也许能算出这个一出来后返回郎

public class ListData { 

    private List<Language> lang; 

    public List<Language> getLang { 
     return lang; 
    } 

    public static class Language { 
     ??? 
    } 
} 

2后)。在主题下的颜色可以是或多或少的{紫色,橙色,无论}。我只需要这些主题的列表,就我而言,我不需要知道每个主题的语言。

感觉这个问题正在变成一本书。我已经广泛地搜索过,并且讨厌提问,但我很难过。提前致谢。

+0

你的代码使用Gson在哪里? – 2013-05-13 20:45:15

+0

当然,您可以将它解析为JSON对象,而不是Gson的东西。 – 2013-05-13 21:28:46

回答

5

1)为了得到"lang"阵列,只需修改

private List<Language> lang; 

private List<String> lang; 

由于内部"lang"数组中的元素都是字符串,你不需要任何类Language到存储这些值,它们将被正确解析为字符串。并不要紧多少字符串数组包含...


2)为了解析"themes",你要注意,这不是一个数组[ ],但对象{ },这样你就需要与一些对象来解析它,这里最适合类是Map这样的:

private Map<String, Object> themes; 

注:如你所说,你不需要数据"blue"下,"green",等等......你可以只是Object作为地图中的值类型,否则你需要一些类...

使用Map这里可以让你在你的JSON响应的主题任意号码。


所以摘要,你只需要像类:

public class ListData { 

    private List<String> lang; 
    private Map<String, Object> themes; 

    //getters & setters 
} 

,并与解析您的JSON:

Gson gson = new Gson(); 
ListData data = gson.fromJson(yourJsonString, ListData.class); 

LANGS将下表:

data.getLang(); 

和你主题的名单将是下:

data.getThemes().keySet(); 

我建议你看一看Gson documentation。它非常简短明了,你会更好地理解一切......

+0

非常感谢。我其实之前尝试过,但我得到期待数组的错误,但是是对象或排序,但我只创建了lang而不是ListData中的主题。实际上检查我的JSON响应我在lang之前获得主题,并且当我使用地图编辑我的ListData时,它现在可以工作。所以我假设GSON不知道如何解析主题?令人难以置信... – 2013-05-14 11:57:34

+0

作为一个小问题,可以说有lang,主题和字体。如果我只想朗和主题将上述答案本身工作,或者我将不得不创建一个对象来处理字体,只是从来没有使用它? – 2013-05-14 12:01:31

+0

如果除了'lang'和'themes',你的JSON中有更多的对象并不重要... Gson只是处理你的类并将类属性的名称与JSON元素名称进行比较......如果一个类属性与JSON中找到的元素的名称相匹配,它会尝试将JSON元素的内容放入类属性中......如果JSON中有某个元素与任何类属性名称不匹配,那么Gson会忽略元件... – MikO 2013-05-14 12:10:26