以下方法为根据Path取json节点值得方法,废话不多说,先上代码:
/**
* Json中数组的形式如:test[0],其中test为JSONObject值,0为数组的下标
* 该方法会对JSONObject和JsonArray进行处理
*
* /
private JSONObject getObj(JSONObject obj, String node) {
try {
if (node.contains("[")) {
JSONArray arr = obj.getJSONArray(node.substring(0,node.indexOf("[")));
for (int i = 0; i < arr.length(); i++) {
if ((i + "").equals(node.substring(node.indexOf("["),node.indexOf("]")).replace("[", ""))) {
return arr.getJSONObject(i);
}
}
} else {
return obj.getJSONObject(node);
}
} catch (Exception e) {
return obj;
}
return null;
}
/**
* 获取节点值
* @author mengfeiyang
* @param jsonContent
* @param jsonPath
* @return
* @throws Exception
*/
public String getNodeValue(String jsonContent,String jsonPath) throws Exception{
String[] nodes = jsonPath.split("\\.");
JSONObject obj = new JSONObject(jsonContent);
for(int i = 1;i
测试方法如下:
public static void main(String[] args) {
try{
JsonPaser jsonPa = new JsonPaser();
String arg = "{\"tokens\": \"videoid:XNzE4OTA0NDQ0\",\"orderby\": \"\",\"offset\": 1,\"total\": 1,\"index_cost\": 0,\"results\": [{\"pk_video\": \"179726111\",\"videoid\": \"XNzE4OTA0NDQ0\",\"show_id\": \"288305\",\"show_videotype\": \"正片\"}],\"total_cost\": 0.0052559375762939}";
String jsonPath = "JSON.results[0].videoid";
String value = jsonPa.getNodeValue(arg, jsonPath);
System.out.println(value);
}catch(Exception e){
e.printStackTrace();
}
}
//该方法执行结果输出为:XNzE4OTA0NDQ0