2015-04-01 27 views
2

我有一个非常沉重的JSON,它有很多参数,我想将其转换为包含其中几个参数的Java对象。将JSON对象转换为Java中的简单变量

直接转换如本

DataObject obj = gson.fromJson(br, DataObject.class); 

不是一个选项。

如何访问对象(date下只是valuetypeattributescompletion_date下)中的各个领域? JSON示例:

{"results":[ 
    {"date":{ 
     "attributes":{ 
     "type":null}, 
     "value":"December 13, 2010"}, 
    "is_structured":"No", 
    "completion_date":{ 
     "attributes":{ 
      "type":"Anticipated"}, 
     "value":"March 2016"}, 
    .... 
+0

“不是一种选择”?为什么? – Dima 2015-04-01 13:32:34

+0

可能你是在谈论JSON.parse看看这个http://stackoverflow.com/questions/4935632/parse-json-in-javascript – 2015-04-01 13:35:23

+0

所以你有你的JSON作为字符串,你想直接访问给定的属性?或者你有某种Map或JsonObject? – 2015-04-01 13:42:09

回答

4

如果你不想直接将您的输入转换为预期的对象,您可以从输入中创建JSONObject,如

JSONObject root = new JSONObject(input); 

,然后导航到,这正是你所需要例如为:

root.getJSONArray("results").getJSONObject(0).getString("is_structured"); 

编辑属性:(接收datevalue

root.getJSONArray("results").getJSONObject(0).getJSONObject("date").getString("value"); 
+0

谢谢你的回答!获取子字段的语法是什么,例如'date.value'? – FloIancu 2015-04-02 09:36:30

+0

因此,您必须导航到更深的'JSONObject'。查看我的编辑 – ceekay 2015-04-02 10:18:45

+0

完美工作。感谢您花时间向我解释,我现在肯定掌握了这件事! – FloIancu 2015-04-03 12:54:28

0

您可以在bean定义中只包含需要的字段。例如,给出下面的JSON

{ 
    firstName: 'It', 
    lastName: 'works', 
    ignoreMe: '!!!' 
} 

bean定义不包含ignoreMe

public class Contact { 
    public String firstName; // setter and getter 
    public String lastName; // setter and getter 
} 

但它与GSON工作:

Gson gson = new Gson(); 
Contact contact = gson.fromJson(new FileReader(new File("test.json")), Contact.class); 
System.out.println("It worked!");