Java 如何解析key为动态的json操作

遇到了这样的json串:

"panel": {
    "8": {
      "112": 1
    },
    "11": {
      "147": 2
    }
  }

遍历获取Key和Value

LinkedHashMap<String, String> jsonMap = JSON.parseObject(jsonStr, new TypeReference<LinkedHashMap<String, String>>(){});
for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
  System.out.println(entry.getKey() + ":" + entry.getValue());
}

补充:Java利用反射动态获取参数并进行操作实例,实现动态获取实体类解析JSON

今天看到程序里面有大量数据都是使用的JSON传输,解析重复代码太多了,然后重构了解析JSON的方式,利用反射机制把解析的方式封装了一下,我这是使用的FastJson,使用其他JSON的自己改一下就可以了

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Map.Entry;
import com.alibaba.fastjson.JSONObject;
import com.zwsd.project.system.user.domain.User;

/**
 * 字符串工具类
 *
 * @author wangchl
 */
public class JsonUtils {

	/**
	 * 获取参数不为空值
	 *
	 * @param  method实体类     text:JSON字符串
	 * @return obj 返回值
	 */
	public static <T> Object Analysis(String method, String text) throws
  ClassNotFoundException {
		Class<?> p = Class.forName(method);
		JSONObject jsonArray = JSONObject.parseObject(text);

		try {
			Constructor con = p.getConstructor();
			Object obj = con.newInstance();
			// 获取私有成员变量,并对它进行赋值
			for (Entry<String, Object> entry : jsonArray.entrySet()) {

				try {
          //设置Key
					Field newname = p.getDeclaredField(entry.getKey());
					// 取消私有成员变量语言访问检查public void setAccessible(boolean flag)
					newname.setAccessible(true);
          //value值为空不做任何操作
					if (!entry.getValue().equals("")) {
						newname.set(obj, entry.getValue());
					}
				} catch (NoSuchFieldException e) {
					// 解析JSON时实体类中没有Key中的字段时会出现异常,忽略,不做任何处理
				}
			}
			return obj;

		} catch (NoSuchMethodException e1) {
			e1.printStackTrace();
		} catch (SecurityException e1) {
			e1.printStackTrace();
		} catch (InstantiationException e1) {
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			e1.printStackTrace();
		} catch (IllegalArgumentException e1) {
			e1.printStackTrace();
		} catch (InvocationTargetException e1) {
			e1.printStackTrace();
		}
		return null;
	}
	/**
	 *
	 *使用方式
	 *
	 */
	public static void main(String[] args) {
		try {
			String text = "
      {\"flag\":\"0\",\"token\":\"0b4b2ef3fed24c99b10c4fca65a09632\"}";
			User user= (User) JsonUtils.Analysis(User.class.getName(), text);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}///
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Java中HashMap里面key为null存放到哪

    我们知道HashMap集合是允许存放null值的 hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢? 在put方法里头,其实第一行就处理了key=null的情况. // HashMap的put方法 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) // key为null调用putForNull

  • Java使用RedisTemplate模糊删除key操作

    Redis模糊匹配批量删除操作,使用RedisTemplate操作: public void deleteByPrex(String prex) { Set<String> keys = redisTemplate.keys(prex); if (CollectionUtils.isNotEmpty(keys)) { redisTemplate.delete(keys); } } prex为迷糊匹配的key,如cache:user:* 这里需要判断keys是否存在,如果一个都匹配不到会报错:

  • JAVA基于SnakeYAML实现解析与序列化YAML

    这篇文章主要介绍了JAVA基于SnakeYAML实现解析与序列化YAML,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.概述 本文,我们将学习如何使用SnakeYAML库将 YAML文档转换为Java对象,以及JAVA对象如何序列化为YAML文档. 2.项目设置 要在项目中使用SnakeYAML,需要添加Maven依赖项(可在此处找到最新版本): <dependency> <groupId>org.yaml</group

  • 如何基于JAVA读取yml配置文件指定key内容

    这篇文章主要介绍了如何基于JAVA读取yml配置文件指定key内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.23</version>

  • Java lambda list转换map时,把多个参数拼接作为key操作

    我就废话不多说了,大家还是直接看代码吧~ Map<String, Parts> partsMap = synList.stream().collect(Collectors.toMap(k -> k.getOe()+k.getOeId()+k.getPartGroupId()+k.getStdPartId()+k.getBrandCode(), part -> part)); 补充知识:Java8 Collectors.toMap的两个大坑 Collectors.toMap()方法

  • Java 使用keytool创建CA证书的操作

    keytool是一个密钥和证书管理工具 1.keytool工具位置 keytool工具在 JDK 的安装目录的 bin 目录下面 2.keytool工具命令展示 打开命令行进入 bin 目录,然后输入命令 keytool.exe,就能看见keytool工具支持哪些命令,如下图所示: 注意下面的用法提示:使用 "keytool -command_name -help" 获取 command_name 的用法 3.查看具体命令用法 这里我们使用 -genkeypair 命令来创建密钥库,先

  • Java 如何解析key为动态的json操作

    遇到了这样的json串: "panel": { "8": { "112": 1 }, "11": { "147": 2 } } 遍历获取Key和Value LinkedHashMap<String, String> jsonMap = JSON.parseObject(jsonStr, new TypeReference<LinkedHashMap<String, String>

  • Java 手动解析不带引号的JSON字符串的操作

    1 需求说明 项目中遇到了一批不带引号的类JSON格式的字符串: {Name:Heal,Age:20,Tag:[Coding,Reading]} 需要将其解析成JSON对象, 然后插入到Elasticsearch中, 当作Object类型的对象存储起来. 在对比了阿里的FastJson.Google的Gson, 没找到想要的功能 ( 可能是博主不够仔细, 有了解的童学留言告诉我下呀

  • 全方位解析key值不确定的json数据

    遇到一个奇葩的需求,一段json的key值是动态的,并且这个key还是有作用的.这就要求在不知道key是多少的情况下去把这段json解析出来. 我用到的方法是迭代器. 具体代码如下 JSONObject jsonObject = new JSONObject(jsonData); //通过迭代器获取这段json当中所有的key值 Iterator keys = jsonObject.keys(); //然后通过一个循环取出所有的key值 while (keys.hasNext()){ Strin

  • Java方法调用解析静态分派动态分派执行过程

    方法调用 在程序运行时,进行方法调用是最普遍,最频繁的操作 方法调用不等于方法执行: 方法调用阶段唯一的任务就是确定被调用的方法版本,即调用哪一个方法 不涉及方法内部的具体运行过程 Class文件的编译过程不包括传统编译中的连接步骤 Class文件中的一切方法调用在Class文件里面存储的都是符号引用,而不是方法在在实际运行时内存布局中的入口地址,即之前的直接引用: 这样使得Java具有更强大的动态扩展能力 同时也使得Java方法调用过程变得相对复杂 需要在类加载期间,甚至会到运行期间才能确定目

  • Java爬虫Jsoup+httpclient获取动态生成的数据

    Java爬虫Jsoup+httpclient获取动态生成的数据 前面我们详细讲了一下Jsoup发现这玩意其实也就那样,只要是可以访问到的静态资源页面都可以直接用他来获取你所需要的数据,详情情跳转-Jsoup爬虫详解,但是很多时候网站为了防止数据被恶意爬取做了很多遮掩,比如说加密啊动态加载啊,这无形中给我们写的爬虫程序造成了很大的困扰,那么我们如何来突破这个梗获取我们急需的数据呢, 下面我们来详细讲解一下如何获取 String startPage="https://item.jd.com/1147

  • JS动态遍历json中所有键值对的方法(不知道属性名的情况)

    本文实例讲述了JS动态遍历json中所有键值对的方法.分享给大家供大家参考,具体如下: JavaScript中使用ajax技术访问后台资源的时候,常常使用json作为轻量级数据传输格式.json类似于Java中的HashMap,是由一系列的key-value键值对构成. 如果后台返回给前台的json中key的值是动态生成的,那么我们没有办法使用常规的object.name或object["name"]的方式来获取json中的值. 这个时候我们需要在不知道属性名称的时候,遍历json对象

  • Java详解ScriptEngine接口动态执行JS脚本

    目录 简介 Eval(String script) 描述 实例代码 Put() and Get() 描述 实例代码 CompiledScript 描述 实例代码 Bindings 描述 实例代码 大多的方法描述都来自于jdk11API帮助文档,由于是机翻,可能有些难以理解,大家多多担待 简介 首先来看一下JDK11API文档中对ScriptEngine的描述 模块 java.scripting 软件包 javax.script Interface ScriptEngin public inter

  • Java实现的properties文件动态修改并自动保存工具类

    本文实例讲述了Java实现的properties文件动态修改并自动保存工具类.分享给大家供大家参考,具体如下: 一.概述 利用commons-configuration读取配置文件,并实现对配置文件的动态修改和自动保存. Apache Common-Configuration工具可以从 Properties文件,XML文件,JNDI,JDBC数据源,System Properties,Applet parameters,Servlet Parameters等读取相应信息 使用步骤 前提,引入co

  • js中动态创建json,动态为json添加属性、属性值的实例

    如下所示: var param = {}; for(var i=0;i<fields.length;i++){ var field = fields[i]; if(field.searchCondition != undefined && $('#search'+field.name).val() != ''){ param["search."+field.name]=$('#search'+field.name).val(); } } 在js中,一个[]认为是数

  • Java反射根据不同方法名动态调用不同的方法(实例)

    list页面的字段要求可以根据用户的喜好进行排序,所以每个用户的字段都对应着不同的顺序(字段顺序存数据库),我们从数据库里取出来的值是对象,但是前台传值是用的ajax和json array,所以就面临着一个对象到json的转换问题:1. 每个用户的字段顺序不固定,代码不能写死, 2. 根据用户字段顺序去取值,如果用if判断每个值然后调用不同的方法,if条件语句太多.然后就看了下反射. Model 类,跟正常model一样 public class Person { private String

随机推荐