`
nannan408
  • 浏览: 1795666 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

架构师之json-----------通过path查找指定数据

 
阅读更多
1.前言
  如题。
2.代码.




import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lijunnan.JsonTypeEnum;

/**
 * 
 * @author 李俊南
 * 
 */
public class JsonUtil {
	private static final Logger logger = Logger.getLogger(JsonUtil.class);

	/**
	 * 获取object需要的json类型,只针对jsonobject.get的object
	 * 
	 * @param object
	 *            需要判断的json对象
	 * @return object匹配的类型
	 */
	public static JsonTypeEnum getType(Object object) {
		if (object instanceof String) {
			return JsonTypeEnum.String;
		} else if (StringUtils.isNumeric(object.toString())) {
			return JsonTypeEnum.Number;
		} else if (object instanceof JSONObject) {
			return JsonTypeEnum.JSONObject;
		} else if (object instanceof JSONArray) {
			return JsonTypeEnum.jsonArray;
		} else {
			return JsonTypeEnum.Other;
		}
	}

	/**
	 * 根据对应的path如A.b1.c1,获取最里层的json的String的值 jaonarray先不考虑
	 * 
	 * @param json
	 *            需要解析的jsonobject
	 * @param path
	 *            格式为形如a.b.c.d
	 * 
	 * 
	 * @return 如果没找到或者异常则返回null,否则返回找到的对应值
	 */
	public static String getJsonValueByPath(String jsonObjectString, String path) {
		try {
			JSONObject json = JSONObject.parseObject(jsonObjectString);
			logger.info("分析数据:"+jsonObjectString+"path:"+path);
			if (StringUtils.isEmpty(path) || null == json) {
				return null;
			}
			// 1.如果不包含.号,则是第一层
			if (!path.contains(".")) {
				return json.getString(path);
			} else {
				// 包含.号的,至少一层以上的层级,层层获取
				String[] paths = StringUtils.split(path, ".");
				JSONObject objectLast = json;
				for (int i = 0; i < paths.length; i++) {
					Object objectTemp = objectLast.get(paths[i]);
					if(null==objectTemp){
						return null;
					}
					JsonTypeEnum jsonType = getType(objectTemp);
					if (jsonType == JsonTypeEnum.String) {
						// 找到String,则返回
						return (String) objectTemp;
					} else if (jsonType == JsonTypeEnum.Number) {
						return String.valueOf(objectTemp);
					} else if (jsonType == JsonTypeEnum.JSONObject) {
					// 没找到String ,继续往下找,jaonarray先不考虑
					objectLast = (JSONObject) objectTemp;
					continue;
					}

				}

			}

		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		return null;
	}
}


public enum JsonTypeEnum {
     String,
     jsonArray,
     JSONObject,
     Number,
     Other
}


3.注意事项。
json的jar包可以用net.json的官方jar替代ali的jar。
分享到:
评论

相关推荐

    struts2 相关jar包 包含json-lib-2.1.jar+struts2-json-plugin-2.1.8.1.jar

    这个压缩包包含了两个关键的组件:json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar,它们是Struts2支持JSON(JavaScript Object Notation)序列化和反序列化的关键。 1. **json-lib-2.1.jar**: JSON是一种轻...

    JSON-RPC.rar+服务客户端通信+微服务架构应用

    JSON-RPC协议基础 JSON-RPC与HTTP请求响应模型 JSON-RPC规范详解 JSON-RPC错误处理机制 JSON-RPC批量请求处理 ...JSON-RPC在微服务架构中的角色 JSON-RPC高级特性:通知与订阅 JSON-RPC实战:构建分布式应用

    json-rpc-1.0.zip

    总的来说,这个`json-rpc-1.0.zip`压缩包为Java开发者提供了一种高效、简单的跨平台通信工具,使得他们能够利用JSON-RPC协议构建分布式系统和微服务架构。通过深入理解和应用这个库,开发者可以优化他们的网络通信...

    json-rpc-java-talk-20050225.pdf

    ### JSON-RPC-Java在构建下一代Web应用中的应用 ...特别是通过使用`XMLHttpRequest`对象以及JSON-RPC-Java库,能够在不刷新页面的情况下实现实时数据更新,使Web应用更接近于桌面应用的性能和体验。

    json-c-0.11-4.el7-0.x64-86.rpm.tar.gz

    json-c是一种轻量级的C语言库,用于处理JSON数据格式,它实现了JSON-C API,用于在C语言中构建和解析JSON格式的数据。本压缩包文件包含了json-c库的特定版本(版本0.11),以及其在特定系统(RHEL/CentOS 7,即...

    使用JSON-RPC

    1. **微服务架构**:在分布式系统中,各服务间通信可以通过JSON-RPC实现低延迟的交互。 2. **浏览器与服务器通信**:JSON-RPC可以与AJAX结合,实现异步更新,提升用户体验。 3. **移动应用开发**:跨平台的移动应用...

    Sylixos系统移植json-c,sharelib工程核心文件.rar

    在IT行业中,操作系统移植是一项复杂而关键的...通过理解这一过程,开发者不仅可以掌握如何在特定操作系统上移植库,还能更好地理解和利用JSON这种数据交换格式。在处理涉及JSON的项目时,这种移植工作显得尤为关键。

    一个基于 JSON-Patch 的对象同步的 JSON-RPC 服务器.zip

    JSON-Patch 和 JSON-RPC 是两个在分布式系统和网络通信中常见的技术标准,尤其是在处理JSON数据时。让我们深入了解这两个概念以及它们如何与C#编程语言相结合。 **JSON-Patch** JSON-Patch是一种按照RFC 6902标准...

    Java框架JSON-RPC项目demo代码实战

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON作为数据交换格式。在Java开发中,JSON-RPC框架可以帮助开发者实现客户端与服务器之间的高效通信,常用于...

    Linux高级架构师12期-视频教程网盘链接提取码下载.txt

    L001-高级架构师12期-zabbix深度实践-13节 L002-高级架构师12期-zabbix深度实践2-2节 L003-高级架构师12期-SaltStack深度实践1-4节 L004-1-高级架构师12期-Saltstack配置管理2-8节 L004-2-高级架构师12期-Saltstack...

    系统架构设计师2009-2018真题及答案

    51CTO系统架构设计师2009-2018真题及答案,好用、专业

    Json-RPC & Spring MVC 集成

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON作为数据交换格式,允许客户端通过HTTP或其他传输协议向服务器发送请求,并获取响应。在Web开发中,JSON-RPC...

    JsonRpc.rar_C++ jsonrpc_JSON_JsonRpc.rar_json-rpc _用jsonrpc封装

    - 微服务架构:不同服务间通过JSON-RPC进行通信。 - 客户端-服务器通信:如游戏客户端向服务器发送玩家操作请求。 - 跨语言交互:C++实现的服务可以被JavaScript、Python等其他语言调用。 5. **文件结构分析**:...

    Node.js-json-git一个纯JS本地Git来版本化任何JSON

    `RobinBressan-json-git-ef4134c`这个文件可能是json-git项目的某个特定版本或者示例代码。通过查看和分析这个文件,你可以更深入地了解json-git的使用方式和实现细节,从而在实际项目中灵活运用。 总结来说,`json...

    json-server-源码.rar

    8. **自定义设置**: JSON-server 允许用户通过配置文件或命令行选项来自定义服务器的行为,比如改变默认端口、指定数据文件等。 9. **模拟数据**: 对于前端开发者来说,JSON-server 是一个很好的工具,可以在开发...

    JSON-RPC 1.0 & 2.0 in Python

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Python中,JSON-RPC允许程序通过网络调用其他服务器...

    json-schema-traverse:遍历 JSON Schema 将每个架构对象传递给回调

    json-schema-traverse 遍历 JSON Schema 将每个架构对象传递给回调安装 npm install json-schema-traverse用法 const traverse = require ( 'json-schema-traverse' ) ;const schema = { properties : { foo : { ...

    api-ms-win-core-path-l1-1-0.dll

    标题中的"api-ms-win-core-path-l1-1-0.dll"是Windows操作系统中的一个核心动态链接库(DLL)文件,它属于Windows API的一部分,主要负责处理路径相关的操作。DLL(Dynamic Link Library)文件是Windows系统中的一种...

    'json-node-normalizer'-NodeJS模块,用于根据json模式规范规范化json数据类型。-Node.js开发

    功能将Json节点类型转换/转换为另一种类型:从Json架构规范来回Json-Node-Normalizer NodeJS模块,可根据json架构规范对json数据类型进行规范化。 功能将Json节点类型转换/转换为另一种类型:从Json Schema规范到...

    api-ms-win-core-path-l1-1-0.dll.rar

    DLL文件是程序共享功能的模块,它们包含可由多个程序同时使用的代码和数据。"api-ms-win-core-path-l1-1-0.dll"特别涉及到路径处理相关的函数,这些函数可能用于解析、创建或验证文件路径。 在描述中,只提到了...

Global site tag (gtag.js) - Google Analytics