`
dieslrae
  • 浏览: 35376 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JSON字符串转换为对象

    博客分类:
  • Java
阅读更多
    作为前言,首先是要吐槽一下公司的脑残编译部署方式,web和core分开部署本来没什么问题,但是这丫居然不把json的包作为基础包而作为web的包,导致了core端不能使用,而且我们的core是可以当web来用的(不要在意这些细节),所以在core中处理json串就是个问题.没办法,跟编译那帮人也扯不清楚,只有自己写json的解析了.
    思路还是将json的解析拆分为两类,一类为Object,解析为map,一类为Array,解析为list.
    先谈Object的,比如是一个这样的串:{aa:bb,cc:{dd:ee,ff:gg}},不管它的层次有多深,先将其拆分为key1:value1,key2:value2,然后再根据value的startsWith是否是{或者来[来判断要不要递归.
    Array的思路也跟Object类似,只是拆分为value1,value2...来处理.

    还是上代码吧

将字符串解析为map的
public Map<String,Object> parseMap(String str){
		Map<String, Object> map = new HashMap<>();
		
		str = str.replaceAll("(^\\{)|(\\}$)","");//处理掉前后的{}
		
		for(int begin=0,end=0,brackets=0;end<str.length();end++){
			if((str.charAt(end) + "").equals(":")){
				String key = str.substring(begin,end);
				
				for(begin=++end;end<=str.length();end++){
					if(end < str.length() && ((str.charAt(end) + "").equals("{") || (str.charAt(end) + "").equals("["))){
						brackets++;
						continue;
					}
					
					if(end < str.length() && ((str.charAt(end) + "").equals("}") || (str.charAt(end) + "").equals("]"))){
						brackets--;
					}
					
					if((end == str.length() || (str.charAt(end) + "").equals(",")) && brackets == 0){
						String value = str.substring(begin,end);
						
						if(value.startsWith("{")){
							map.put(key, parseMap(value));
						}else if(value.startsWith("[")){
							map.put(key, parseList(value));
						}else{
							map.put(
								key.replaceAll("^[\",']|[\",']$",""), 
								value.replaceAll("^[\",']|[\",']$",""));
						}
						
						begin = end +1;
						break;
					}
				}
			}
		}
		
		return map;
	}


字符串解析为list
public List<Object> parseList(String str){
		List<Object> list = new ArrayList<Object>();
		
		str = str.replaceAll("(^\\[)|(\\]$)","");
		Stack<String> stack = new Stack<>();
		
		for(int begin=0,end=0,brackets=0;end<=str.length();end++){
			if(end < str.length() && ((str.charAt(end) + "").equals("{") || (str.charAt(end) + "").equals("["))){
				brackets++;
				continue;
			}
			
			if(end < str.length() && ((str.charAt(end) + "").equals("}") || (str.charAt(end) + "").equals("]"))){
				brackets--;
			}
			
			if((end == str.length() || (str.charAt(end) + "").equals(",")) && brackets == 0){
				String value = str.substring(begin,end);
				
				if(value.toString(). startsWith("{")){
					list.add(parseMap(value));
				}else if(value.toString().startsWith("[")){
					list.add(parseList(value));
				}else{
					list.add(value.replaceAll("^[\",']|[\",']$",""));
				}
				
				begin = end + 1;
			}
		}
		
		return list;
	}


json转成字符串
@SuppressWarnings("unchecked")
	public String JSON2String(Map<String,?> map){
		StringBuilder str = new StringBuilder();
		
		for(String key : map.keySet()){
			str.append("\"").append(key).append("\":");
			
			Object value = map.get(key);
			
			if(value instanceof Map){
				str.append(JSON2String((Map<String,?>)value)).append(",");
			}else if(value instanceof List){
				str.append(JSON2String((List<?>)value)).append(",");
			}else{
				str.append("\"").append(value).append("\",");
			}
		}
		
		return "{" + str.substring(0,str.length() - 1) + "}";
	}
	
	@SuppressWarnings("unchecked")
	public String JSON2String(List<?> list){
		StringBuilder str = new StringBuilder();
		
		for(Object value :list){
			if(value instanceof Map){
				str.append(JSON2String((Map<String,?>)value)).append(",");
			}else if(value instanceof List){
				str.append(JSON2String((List<?>)value)).append(",");
			}else{
				str.append("\"").append(value).append("\",");
			}
		}
		
		return "[" + str.substring(0,str.length() - 1) + "]";
	}
分享到:
评论

相关推荐

    将json字符串转换为对象

    标题提到的“将json字符串转换为对象”,实际上是在指JSON.parse()方法,这个方法在JavaScript中用于将一个合法的JSON字符串转化为JavaScript对象。例如,我们有一个如下的JSON字符串: ```json let jsonString = '...

    json字符串转换c++类对象

    在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...

    java对象转换为json字符串或字符串数组

    除了序列化,`json-lib`还支持反序列化,即将JSON字符串转换回Java对象: ```java Person deserializedPerson = (Person) JSONSerializer.toJava(jsonString); ``` 6. JSONPath和JSONSchema: 在实际应用中,...

    Json对象与json字符串互相转换处理工具

    Json对象与json字符串互相转换处理工具

    解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包

    标题和描述提及的是将JSON字符串转换为Java对象,特别是涉及多层嵌套和List集合的情况。这在处理复杂数据结构时非常常见,比如服务器返回的响应可能包含嵌套的对象和数组。下面我们将详细介绍如何使用Jackson库来...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    接下来,我们看一段示例代码,演示如何将JSON字符串转换为包含多层List集合的Java对象。这里假设我们有一个天气查询的API返回的JSON响应,其中包含城市列表,每个城市又有指数和天气数据等信息: ```java // 将JSON...

    使用json-lib将java对象转换成json字符串

    标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...

    json字符串转换插件

    通过这种方式,你可以使用`JsonUtils.jsonToJavaObject()`方法将JSON字符串转换为任意指定类型的Java对象,而`JsonUtils.javaObjectToJson()`则将Java对象转换为JSON字符串。 总之,JSON字符串转换插件是Java开发中...

    由php对象生成json字符串 把php对象变成json字符串.zip

    总的来说,将PHP对象转换为JSON字符串是通过json_encode()函数完成的,对于对象,可以考虑实现JsonSerializable接口或使用特定选项来控制序列化行为。在实际开发中,还要注意错误处理和编码选项的设置,以确保数据...

    利用java反射将json字符串转成对象.zip

    在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...

    asp字符串转json对象类

    本知识点主要关注如何将ASP中的字符串转换为JSON对象,特别地,这个过程是通过原生的VBScript(Visual Basic Script)实现的,而不是依赖于第三方库。 首先,我们需要理解VBScript中的JSON解析概念。由于ASP.NET...

    JSON 字符串 与 java 对象的转换

    // 把JSON字符串转换为JAVA对象数组 JSONArray json = JSONArray.fromObject(personStr); List&lt;InvoidPerson&gt; persons = (List) JSONArray.toCollection(json, InvoidPerson.class); ``` #### 4. JSON字符串转换为...

    利用Google Gson实现JSON字符串和对象之间相互转换

    以下是一个简单的例子,展示如何将JSON字符串转换为Java对象: ```java class User { private String name; private int age; // getters and setters... } String jsonString = "{\"name\":\"John\", \"age\...

    模仿json,根据对象生成json字符串,根据字符串生成对象

    同样以`com.google.gson`为例,我们可以使用`fromJson()`方法将JSON字符串转换回Java对象。在上面的例子中,如果我们已经有一个JSON字符串,可以这样做: ```java String jsonString = "{\"name\":\"Alice\",\"age\...

    js json字符串转对象

    本文主要关注如何将JSON字符串转换为JavaScript对象。 1. **JSON.stringify() 和 JSON.parse()** `JSON.stringify()` 是JavaScript提供的一个内置函数,用于将JavaScript对象转换为JSON字符串。这在需要在网络间...

    通用的josn字符串转换为对象和对象转换为字符串的c#源码

    在C#中,将JSON字符串转换为对象的过程称为反序列化,而将对象转换为JSON字符串则称为序列化。下面将详细解释这两个过程以及如何在C#中实现它们。 **一、JSON反序列化** 反序列化是将JSON字符串转换为C#对象的过程...

    递归下降文法-Json字符串转换成Java对象

    用java实现的递归下降文法 将JSon字符串转换成Java对象 为了简单化 忽略了很多情况 仅仅作为初接触编译原理的同学们共勉 User对象有一个Teacher对象 Teacher里有一个Book对象 等等 比如 User user User json User ...

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    /// 将Json字符串解析为C#中的对象 /// Json格式中的字符串值识别 /// 将Json字符串解析为Dictionary, dynamic&gt;对象。 /// 将Json字符串解析为dynamic[]对象。 /// Dictionary类型对象转换为Json格式字符串 /// C#...

    json字符串轻松转换成对象

    在Java编程中,我们经常需要将JSON字符串转换为对象,以便进行数据处理。本教程将详细讲解如何在Java中实现这个过程,并提供一个具体的代码实例。 首先,我们需要引入能够处理JSON的库。在Java中,常用的有`org....

Global site tag (gtag.js) - Google Analytics