读取JSON所有元素的属性和值

本文介绍了一种使用Java从JSON字符串中提取属性和值的方法。通过遍历字符串并利用字符匹配,实现了对JSON数据的有效解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    有时候需要用JAVA将JSON字符串中的所有元系属性和值解析出来,例如:

String sql="[{\"typeNo\":\"PTMM01\",\"typeValue\":\"1\"},{\"typeNo\":\"PTMM02\",\"typeValue\":\"2\"}]";

 

你需要得到[typeNo:PTMM01, typeValue:1, typeNo:PTMM02, typeValue:2 ]这种属性和值对应的集合。

 

/**
	 * {读取JSON字符串的所有元素的属性和值,按此原理可以改造成功能更强大的JSON解析类}
	 * @author wenfeng.xu
	 * 
	 */
	public List convertJosnString(String str){
		List retVal=new ArrayList();
		String SYMBOL_OPEN_BRACE="{";
		String SYMBOL_CLOSE_BRACE="}";
		String SYMBOL_SINGLE_QUO_MARKS="\"";
		String SYMBOL_COLON=":";
		String SYMBOL_COMMA=",";
		String SYMBOL_OPEN_BRACKET="[";
		String SYMBOL_CLOSE_BRACKET="]";
		String PRE_SYMBOL_SINGLE_QUO_MARKS_0="PRE_SYMBOL_SINGLE_QUO_MARKS_0";//第一个单引号的索引
		String PRE_SYMBOL_SINGLE_QUO_MARKS_1="PRE_SYMBOL_SINGLE_QUO_MARKS_1";
		String PRE_SYMBOL_SINGLE_QUO_MARKS_2="PRE_SYMBOL_SINGLE_QUO_MARKS_2";
		String PRE_SYMBOL_SINGLE_QUO_MARKS_3="PRE_SYMBOL_SINGLE_QUO_MARKS_3";
		Map temMap=new HashMap();
		char[] temChar=str.toCharArray();
		for(int i=0;i<temChar.length;i++)
		{
			
			if(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_3)==null)
			{
			if(temChar[i]==SYMBOL_COLON.charAt(0))
			{
				temMap.put(SYMBOL_COLON,SYMBOL_COLON);
			}
			
			if(temChar[i]==SYMBOL_SINGLE_QUO_MARKS.charAt(0))
			{
				if(temMap.get(SYMBOL_SINGLE_QUO_MARKS)==null)
				{
					temMap.put(SYMBOL_SINGLE_QUO_MARKS,i);
				}else{//如果已经存在一个单引号
			        
			        if(temMap.get(SYMBOL_COLON)==null){//如果不存在冒号
			        	  temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_0,Integer.parseInt(temMap.get(SYMBOL_SINGLE_QUO_MARKS).toString())+1);
					      temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_1,i);
			        }else{
			      	      temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_2,Integer.parseInt(temMap.get(SYMBOL_SINGLE_QUO_MARKS).toString())+1);
				          temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_3,i);
		            }
			        temMap.remove(SYMBOL_SINGLE_QUO_MARKS);
			        
				}
			}
			}else{
				   int index_0=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_0).toString());
				   int index_1=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_1).toString()); 
				   int index_2=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_2).toString()); 
				   int index_3=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_3).toString());
				   String attr=str.substring(index_0,index_1);
				   String value=str.substring(index_2,index_3);
				   retVal.add(attr+":"+value);
				   temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_0);
				   temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_1);
				   temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_2);
				   temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_3);
				   temMap.remove(SYMBOL_COLON);
			}
		}
		
		return retVal;
	}

 

 我的网店,有劳各位参观参观 http://mrs-x.taobao.com/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值