文档章节

Java根据JSON的路径获取节点值

孟飞阳
 孟飞阳
发布于 2016/06/30 09:41
字数 405
阅读 922
收藏 1

        最近工作中,经常需要对json做解析,而json的格式又不统一,实际使用也就是获取json中的一个节点值。于是就想通过写json路径的方式来直接拿到节点值,这样就就不用对不同格式的json数据单独写解析方法了。下面这段代码能够很好的解决这个问题,给对于和我有同样需求的童鞋做个参考。另外对于接口测试,在我的phoenixframework平台中的phoenix_interface里面还有很多诸如此类的工具,会给开发工作带来很大的方便。

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字符串的树结构如下:

获取author的json路径就是:JSON.projectInfo.author,是不是方便了很多呢。

在实际使用时,这样的json路径很容易获得,例如通过chrome的json插件。

© 著作权归作者所有

孟飞阳
粉丝 217
博文 1057
码字总数 566384
作品 5
朝阳
个人站长
私信 提问
xStream完美转换XML、JSON

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介绍过json-lib这个框架,在线博文:http://www.cnblog...

DavidBao
2015/05/01
779
1
JSON-lib框架,转换JSON、XML

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

五大三粗
2015/11/03
157
0
JSON-lib框架,转换JSON、XML不再困难

JSON-lib框架,转换JSON、XML不再困难 Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对...

DavidBao
2015/05/01
154
0
Java 根据环境属性区分不同操作系统

Java 根据环境属性区分不同操作系统 之前项目需要配置下载文件的路径,本机系统是win 10 ,而服务器系统是CentOS。配置默认下载路径(非项目内相对路径),就会出现问题。windows 路径是由盘...

肖安安
2018/07/09
0
0
web3j以太坊java开发包详解

web3j()是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整,除了以太...

ezpod
2018/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7系统增加swap

转载请注明文章出处:CentOS 7系统增加swap swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关)...

tlanyan
15分钟前
2
0
基于Prometheus和Grafana的监控平台 - 环境搭建

相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。 Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说...

JAVA日知录
55分钟前
5
0
PHP运行时全局构造体

struct _php_core_globals { zend_bool magic_quotes_gpc; // 是否对输入的GET/POST/Cookie数据使用自动字符串转义。 zend_bool magic_quotes_runtime; //是否对运行时从外部资源产生的数据使...

冻结not
56分钟前
4
0
webpack插件html-webpack-plugin

本文转载于:专业的前端网站→webpack插件html-webpack-plugin 1、插件安装 npm install html-webpack-plugin --save-dev 2、插件使用 webpack.config.js配置文件为: var htmlWebpackPlugin=...

前端老手
今天
6
0
数据挖掘

zhengchen1996
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部