/**
* eg.
* https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/6029/JSON/?response_type=display
* molecular-weight jsonpath:
* j:record->a:Section->j:{TOCHeading:Chemical and Physical Properties}->a:Section->
* j:{TOCHeading:Computed Properties}->a:Section->j:{TOCHeading:Molecular Weight}->a:Information->j:[0]->j:Value->a:StringWithMarkup->j:[0]->k:String
* @param jsonPath
* @return
*/
public static String getValue(String json,String jsonPath){
String value = "";
String[] paths = jsonPath.split("->");
JSONObject jsonObject = JSONObject.parseObject(json);
JSONArray jsonArray = null;
String key =null,keyAndValue=null,jsonIndexStr=null;
String[] keyValues;
int attrIndex = 0,jsonIndex =0;
for(int i=0;i<paths.length;i++){
//System.out.println(paths[i]);
attrIndex = paths[i].indexOf("{");
jsonIndex = paths[i].indexOf("[");
if(attrIndex > 0){
keyAndValue = paths[i].substring(attrIndex+1,paths[i].length()-1);
}else{
key = paths[i].substring(2);
}
if(jsonIndex > 0){
jsonIndexStr = paths[i].substring(jsonIndex+1,paths[i].length()-1);
jsonIndex = Integer.parseInt(jsonIndexStr);
}
if(paths[i].startsWith("j:")){
if(jsonObject ==null && jsonArray !=null){
if(StringUtils.isNotEmpty(keyAndValue)){
keyValues = keyAndValue.split(":");
//该节点从jsonArray中取
for(int j = 0;j<jsonArray.size();j++){
jsonObject = jsonArray.getJSONObject(j);
if(jsonObject.getString(keyValues[0]).equals(keyValues[1])){
keyAndValue = null;
break;
}
}
}
if(StringUtils.isNotEmpty(jsonIndexStr)){
jsonObject = jsonArray.getJSONObject(jsonIndex);
}
}else{
jsonObject = jsonObject.getJSONObject(key);
}
jsonArray = null;
}else if(paths[i].startsWith("a:")){
jsonArray = jsonObject.getJSONArray(key);
jsonObject = null;
}else if(paths[i].startsWith("k:")){
if(jsonIndex >= 0){
value = jsonArray.getString(jsonIndex);
}else{
value = jsonObject.getString(paths[i].substring(2));
}
}
}
//System.out.println(value);
return value;
}
自定义解析多层次复杂JSON的方法
最新推荐文章于 2022-07-25 14:50:41 发布