如何使用Java访问json中的嵌套字段?

时间:2017-05-02 19:02:02

标签: java json

我有一个很大的JSON文件(demo.json)。这是它的样子:

{  
   "preview":false,
   "result":{  
      "search_term":"rania",
      "request_time":"Sat Apr 01 12:47:04 -0400 2017",
      "request_ip":"127.0.0.1",
      "stats_type":"stats",
      "upi":"355658761",
      "unit":"DR",
      "job_title":"Communications Officer",
      "vpu":"INP",
      "organization":"73",
      "city":"Wash",
      "country":"DC",
      "title":"Tom",
      "url":"www.demo.com",
      "tab_name":"People-Tab",
      "page_name":"PEOPLE",
      "result_number":"5",
      "page_num":"0",
      "session_id":"df234f468cb3fe8be",
      "total_results":"5",
      "filter":"qterm=rina",
      "_time":"2017-04-01T12:47:04.000-0400"
   }
}
{"preview"......}
{"preview"......}
....

我想访问结果中的搜索词和page_name,并将它们转换为字符串。下面是我的java代码,它不起作用:

BufferedReader br = new BufferedReader(new FileReader("demo.json"));
String line;
while ((line = br.readLine()) != null) {

                JSONParser parser = new JSONParser();
                Object obj = parser.parse(line);
                JSONObject jsonObject = (JSONObject) obj;
                String searchterm= (String) jsonObject.get("search_term");
                String page_name = (String) jsonObject.get("page_name");
}

我不熟悉如何访问嵌套字段并将其转换为字符串。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

boolean preview = jsonObject.get("preview");
JSONObject result = jsonObject.getJSONObject("result");
String search_term = result.getString("search_term");
String page_name = result.getString("page_name");

答案 1 :(得分:0)

您可以使用像Gson这样的库。将数据转换为Map

    BufferedReader br = new BufferedReader(new FileReader("demo.json"));
String line;
StringBuilder builder=new StringBuilder();
while ((line = br.readLine()) != null) {
builder.append(line);

} 

       Type type = new TypeToken<Map<String, String>>(){}.getType();
       Map<String, String> myMap = gson.fromJson(builder.toString(), type);

您可以使用myMap获取json Keys的值。对于嵌套的Key,您可以再次将其转换为Map。

答案 2 :(得分:0)

使用ObjectMapper将您的JSON转换为PoJo,然后使用它。