`
nannan408
  • 浏览: 1783681 次
  • 性别: 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-c-0.12.1-nodoc.tar.gz

    JSON-C 是一个小型的 JSON(JavaScript Object Notation)C 库,用于在 C 语言环境中解析和生成 JSON 数据。...通过解压和编译 JSON-C,开发者可以在嵌入式系统上实现 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框架可以帮助开发者实现客户端与服务器之间的高效通信,常用于...

    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-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.rar_JSON_JSON-RPC.jar_jsonRPC.J

    通过分析和实践"JSON.rar"中的内容,你可以深入理解JSON的数据交换机制,掌握JSON-RPC的工作原理,并能够熟练地在实际项目中运用。这将提升你在Web开发和分布式系统设计中的能力,为你的职业生涯添加宝贵的技能。...

    '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"特别涉及到路径处理相关的函数,这些函数可能用于解析、创建或验证文件路径。 在描述中,只提到了...

    json-lib-2.4及它的所有依赖jar包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,它以文本形式存储和...在Java Web开发中,理解和掌握JSON库的使用是必备技能之一,特别是对于处理JSON格式的数据交换和存储。

    react-json-schema:使用映射到React组件的JSON模式配置和构建视图

    react-json-schema npm install react-json-schema 通过将JSON定义映射到React组件来从JSON构造React元素。 将react-json-schema用于数据驱动的布局,或用作React组件和道具的抽象层。 渲染到任何地方(只要是DOM)...

    struts2-json-lib

    总之,"struts2-json-lib"提供了实现Struts2和JSON整合所需的全部组件,简化了在Java Web应用中处理JSON数据的过程。正确地配置和使用这些库,可以大大提升开发者的生产力,让Web应用具备更强大的数据交互能力。

    架构师职能图------------

    架构师职能图----------------------------------

    架构师学习指南-高级架构师必修学习视频

    架构师学习指南-高级架构师必修学习视频架构师学习指南-高级架构师必修学习视频

    json-from-schema:从JSON模式生成JSON

    json-from-schema基于架构生成随机JSON。 用法 var jfs = require ( 'json-from-schema' ) ; var schema1 = { id : 'http://www.example.com/herp#' , type : "object" , properties : { someString : { type : ...

Global site tag (gtag.js) - Google Analytics