Java遍历Json中的key和value问题

 更新时间:2023年11月20日 08:39:19   作者:请告诉他  
这篇文章主要介绍了Java遍历Json中的key和value问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java遍历Json中的key和value

最近对接了不少别人家的系统,他们的签名验签大多采用业务数据值拼接之后进行加密动作

这个时候遍历出对象中的key和value就有为方便,

因此有以下现成代码:

 
    public String appendSignData(JSONObject obj){
 
        StringBuffer sb = new StringBuffer();
        //fastjson解析方法
        for (Map.Entry<String, Object> entry : obj.entrySet()) {
            System.out.println("key值="+entry.getKey());
            sb.append(entry.getValue());
        }
 
 
        return sb.toString();
    }

遍历获取JSONObject的所有Key

JSON解析使用JSONObject.keys()可以获取所有的key值,但是这种方法只能获取一层:

比如{"b":"2","c":{"A":"1","B":"2"},"a":"1"},只能够获取b,c,a

如果想要获取被嵌套的{"A":"1","B":"2"}中A,B就不可以了

自己实现了一下获取嵌套类型的JSONObject的所有key值

import java.util.Iterator;
 
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
 
public class testGetKeys {
 
	
	 public static String getKeys(JSONObject test) throws JSONException{
		   
		 String result = null;
		 testJsonCompare t = new testJsonCompare();
		 Iterator keys = test.keys();
		 while(keys.hasNext()){
			 
			 try{
				 
			 String key = keys.next().toString();
			 String value = test.optString(key);
			 
			 int i = t.testIsArrayORObject(value);
			 
			 if(result == null || result.equals("")){
				 if(i == 0){
				
					 result = key + ",";
					 System.out.println("i=0 | key="+key+"| result="+result);
					 
					 
				 }else if( i == 1){
					
					 result = key + ",";
					 System.out.println("i=1 | key="+key+"| result="+result);
					 result = getKeys(new JSONObject(value))+",";
				 }else if( i == 2){
					 
					 result = key + ",";
					 System.out.println("i=2 | key="+key+"| result="+result);
					 JSONArray arrays = new JSONArray(value);
					 for(int k =0;k<arrays.length();k++){
						 JSONObject array = new JSONObject(arrays.get(k));
						 result = getKeys(array) + ",";
					 }
				 }
				 
			 }else{
				  if(i == 0){
				
				 result = result + key + ",";
				 System.out.println("i=0 | key="+key+"| result="+result);
				 
				 
			 }else if( i == 1){
				
				 result = result + key + ",";
				 System.out.println("i=1 | key="+key+"| result="+result);
				 result = result + getKeys(new JSONObject(value));
			 }else if( i == 2){
				 result = result + key + ",";
				 System.out.println("i=2 | key="+key+"| result="+result);
				 JSONArray arrays = new JSONArray(value);
				 for(int k =0;k<arrays.length();k++){
					 JSONObject array = new JSONObject(arrays.get(k));
					 result = result + getKeys(array) + ",";
				 }
			 }
			 }
			
			 
		 }catch(JSONException e){
			 e.printStackTrace();
		 }
			 }
		
		 
		 return result;
	 }
	 
	 public static void main(String args[]) throws org.json.JSONException{
		 
		 JSONObject test = new JSONObject();
		 JSONObject test1 = new JSONObject();
		 
		 try{
			  test1.put("A", "1");
			  test1.put("B", "2");
			  
			  test.put("a", "1");
			  test.put("c", test1);
			  test.put("b", "2");
		  
			  System.out.println(test.toString());
			  
		 }catch(JSONException e){
			 e.printStackTrace();
		 }
		 
		 String s = getKeys(test);
		 System.out.println(s);
		
		 
	 }
}

testIsArrayORObject是判断一个字符串是array类型还是object

	public int testIsArrayORObject(String sJSON){
		/*
		 * return 0:既不是array也不是object
		 * return 1:是object
		 * return 2 :是Array
		 */
		try {
			JSONArray array = new JSONArray(sJSON);
			return 2;
		} catch (JSONException e) {// 抛错 说明JSON字符不是数组或根本就不是JSON
			try {
				JSONObject object = new JSONObject(sJSON);
				return 1;
			} catch (JSONException e2) {// 抛错 说明JSON字符根本就不是JSON
				System.out.println("非法的JSON字符串");
				return 0;
			}
		}
 
	}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 归并排序算法、堆排序算法实例详解

    Java 归并排序算法、堆排序算法实例详解

    这篇文章主要介绍了Java 归并排序算法、堆排序算法实例详解,需要的朋友可以参考下
    2017-05-05
  • ElasticSearch学习之文档API相关操作

    ElasticSearch学习之文档API相关操作

    这篇文章主要为大家介绍了ElasticSearch学习之文档API相关操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    这篇文章主要介绍了Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • java虚拟机学习高级篇

    java虚拟机学习高级篇

    在本篇文章里小编给大家整理了关于java虚拟机学习高级篇的相关内容,有兴趣的朋友们跟着学习参考下。
    2019-06-06
  • Java中获取泛型类型信息的方法

    Java中获取泛型类型信息的方法

    本文主要介绍了Java中获取泛型类型信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Android中PreferenceFragment的使用详解

    Android中PreferenceFragment的使用详解

    本文主要介绍了Android中PreferenceFragment的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • idea将项目上传到Gitee的图文过程

    idea将项目上传到Gitee的图文过程

    这篇文章主要介绍了idea将项目上传到Gitee上,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Spring中使用ehcache缓存的方法及原理详解

    Spring中使用ehcache缓存的方法及原理详解

    这篇文章主要介绍了Spring中使用ehcache缓存的方法及原理详解,ehcache具有很强的灵活性,提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最近最少使用、最久未使用和先进先 出缓存淘汰算法, 构成了完整的缓存淘汰算法,,需要的朋友可以参考下
    2024-01-01
  • Java中JSON对象字段为null值的显示处理方法

    Java中JSON对象字段为null值的显示处理方法

    这篇文章主要给大家介绍了关于Java中JSON对象字段为null值的显示处理方法,最近开发过程中前端反应后台返回的json中包含null,不好处理,这里介绍下,需要的朋友可以参考下
    2023-08-08
  • java swing中实现拖拽功能示例

    java swing中实现拖拽功能示例

    这篇文章主要介绍了java swing中实现拖拽功能示例,需要的朋友可以参考下
    2014-04-04

最新评论