{
"took": 6200,
"timed_out": false,
"_shards": {
"total": 68,
"successful": 68,
"failed": 0
},
"hits": {
"total": 110745094,
"max_score": 1,
"hits": []
},
"facets": {
"pie": {
"_type": "terms",
"missing": 135,
"total": 29349,
"other": 26420,
"terms": [
{
"term": "165.130.136.210",
"count": 390
},
{
"term": "165.130.136.206",
"count": 381
},
{
"term": "205.138.114.8",
"count": 359
},
{
"term": "205.138.115.229",
"count": 334
},
{
"term": "165.130.136.208",
"count": 331
},
{
"term": "66.37.212.155",
"count": 283
},
{
"term": "209.67.71.137",
"count": 279
},
{
"term": "66.37.204.17",
"count": 201
},
{
"term": "64.28.92.213",
"count": 193
},
{
"term": "64.85.64.202",
"count": 178
}
]
}
}
}
我正在尝试解析以下内容,我尝试了很多 API,通过在 perl 中使用 JSon 和 JSon.simple,在 Java 中使用 gson 没有运气。
我要解析的是 facets=>pie=>terms=>term 和 count,有人可以提示我如何提取这两个值吗?
这是我到目前为止所拥有的
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class TrueIPMonitor {
public static void main(String[] args) {
String json = getJson();
System.out.println(json);
System.out.println(parse(json));
}
public static String parse(String jsonLine) {
JsonElement jelement = new JsonParser().parse(jsonLine);
JsonObject jobject = jelement.getAsJsonObject();
jobject = jobject.getAsJsonObject("facets");
JsonArray jarray = jobject.getAsJsonArray("pie");
jobject = jarray.get(0).getAsJsonObject();
String result = jobject.get("terms").toString();
return result;
}
public static String getJson() {
BufferedReader br;
String json = "";
try {
br = new BufferedReader(new FileReader("script/curlJson.log"));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append('\n');
line = br.readLine();
}
json = sb.toString();
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
}
{ "took" : 6200, "timed_out" : false, "_shards" : { "total" : 68, "successful" : 68, "failed" : 0 }, "hits" : { "total" : 110745094, "max_score" : 1.0, "hits" : [ ] }, "facets" : { "pie" : { "_type" : "terms", "missing" : 135, "total" : 29349, "other" : 26420, "terms" : [ { "term" : "165.130.136.210", "count" : 390 }, { "term" : "165.130.136.206", "count" : 381 }, { "term" : "205.138.114.8", "count" : 359 }, { "term" : "205.138.115.229", "count" : 334 }, { "term" : "165.130.136.208", "count" : 331 }, { "term" : "66.37.212.155", "count" : 283 }, { "term" : "209.67.71.137", "count" : 279 }, { "term" : "66.37.204.17", "count" : 201 }, { "term" : "64.28.92.213", "count" : 193 }, { "term" : "64.85.64.202", "count" : 178 } ] } } }
Exception in thread "main" java.lang.ClassCastException: com.google.gson.JsonObject cannot be cast to com.google.gson.JsonArray
at com.google.gson.JsonObject.getAsJsonArray(JsonObject.java:172)
at com.xxx.perf.monitor.TrueIPMonitor.parse(TrueIPMonitor.java:36)
at com.xxx.perf.monitor.TrueIPMonitor.main(TrueIPMonitor.java:28)