Java根據JSON的路徑獲取節點值

        最近工做中,常常須要對json作解析,而json的格式又不統一,實際使用也就是獲取json中的一個節點值。因而就想經過寫json路徑的方式來直接拿到節點值,這樣就就不用對不一樣格式的json數據單獨寫解析方法了。下面這段代碼可以很好的解決這個問題,給對於和我有一樣需求的童鞋作個參考。另外對於接口測試,在個人phoenixframework平臺中的phoenix_interface裏面還有不少諸如此類的工具,會給開發工做帶來很大的方便。java

import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonPaser {
	
	/**
	 * 對節點進行解析
	 * 
	 * @author mengfeiyang
	 * @param obj
	 * @param node
	 * @return
	 */
	private static 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 static synchronized String getNodeValue(String jsonContent, String jsonPath) throws Exception {
		String[] nodes = jsonPath.split("\\.");
		JSONObject obj = new JSONObject(jsonContent);

		for (int i = 1; i < nodes.length; i++) {
			if (obj != null) {
				obj = getObj(obj, nodes[i]);
			}

			if ((i + 1) == nodes.length) {
				try{
					return obj.getString(nodes[i]);
				}catch(Exception e){
					return "JSONException:"+e.getMessage()+",NodeString:"+obj.toString();
				}
			}
		}
		return null;
	}
	public static void main(String[] args) throws Exception {
        //構造json字符串
		String jsonContent = "{\"projectName\":\"JSON\",\"projectInfo\":{\"author\":\"test\",\"version\":1.0}}";
		String val = JsonPaser.getNodeValue(jsonContent, "JSON.projectInfo.author");
		System.out.println(val);//執行結果:test
	}
}

如上代碼中json字符串的樹結構以下:node

獲取author的json路徑就是:JSON.projectInfo.author,是否是方便了不少呢。chrome

在實際使用時,這樣的json路徑很容易得到,例如經過chrome的json插件。json

相關文章
相關標籤/搜索