作为前言,首先是要吐槽一下公司的脑残编译部署方式,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.parse()方法,这个方法在JavaScript中用于将一个合法的JSON字符串转化为JavaScript对象。例如,我们有一个如下的JSON字符串: ```json let jsonString = '...
在C++编程中,将JSON字符串转换为C++类对象是一项常见的任务,特别是在处理网络通信、数据存储或配置文件时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...
除了序列化,`json-lib`还支持反序列化,即将JSON字符串转换回Java对象: ```java Person deserializedPerson = (Person) JSONSerializer.toJava(jsonString); ``` 6. JSONPath和JSONSchema: 在实际应用中,...
Json对象与json字符串互相转换处理工具
标题和描述提及的是将JSON字符串转换为Java对象,特别是涉及多层嵌套和List集合的情况。这在处理复杂数据结构时非常常见,比如服务器返回的响应可能包含嵌套的对象和数组。下面我们将详细介绍如何使用Jackson库来...
接下来,我们看一段示例代码,演示如何将JSON字符串转换为包含多层List集合的Java对象。这里假设我们有一个天气查询的API返回的JSON响应,其中包含城市列表,每个城市又有指数和天气数据等信息: ```java // 将JSON...
标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...
通过这种方式,你可以使用`JsonUtils.jsonToJavaObject()`方法将JSON字符串转换为任意指定类型的Java对象,而`JsonUtils.javaObjectToJson()`则将Java对象转换为JSON字符串。 总之,JSON字符串转换插件是Java开发中...
总的来说,将PHP对象转换为JSON字符串是通过json_encode()函数完成的,对于对象,可以考虑实现JsonSerializable接口或使用特定选项来控制序列化行为。在实际开发中,还要注意错误处理和编码选项的设置,以确保数据...
在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...
本知识点主要关注如何将ASP中的字符串转换为JSON对象,特别地,这个过程是通过原生的VBScript(Visual Basic Script)实现的,而不是依赖于第三方库。 首先,我们需要理解VBScript中的JSON解析概念。由于ASP.NET...
// 把JSON字符串转换为JAVA对象数组 JSONArray json = JSONArray.fromObject(personStr); List<InvoidPerson> persons = (List) JSONArray.toCollection(json, InvoidPerson.class); ``` #### 4. JSON字符串转换为...
以下是一个简单的例子,展示如何将JSON字符串转换为Java对象: ```java class User { private String name; private int age; // getters and setters... } String jsonString = "{\"name\":\"John\", \"age\...
同样以`com.google.gson`为例,我们可以使用`fromJson()`方法将JSON字符串转换回Java对象。在上面的例子中,如果我们已经有一个JSON字符串,可以这样做: ```java String jsonString = "{\"name\":\"Alice\",\"age\...
本文主要关注如何将JSON字符串转换为JavaScript对象。 1. **JSON.stringify() 和 JSON.parse()** `JSON.stringify()` 是JavaScript提供的一个内置函数,用于将JavaScript对象转换为JSON字符串。这在需要在网络间...
在C#中,将JSON字符串转换为对象的过程称为反序列化,而将对象转换为JSON字符串则称为序列化。下面将详细解释这两个过程以及如何在C#中实现它们。 **一、JSON反序列化** 反序列化是将JSON字符串转换为C#对象的过程...
用java实现的递归下降文法 将JSon字符串转换成Java对象 为了简单化 忽略了很多情况 仅仅作为初接触编译原理的同学们共勉 User对象有一个Teacher对象 Teacher里有一个Book对象 等等 比如 User user User json User ...
/// 将Json字符串解析为C#中的对象 /// Json格式中的字符串值识别 /// 将Json字符串解析为Dictionary, dynamic>对象。 /// 将Json字符串解析为dynamic[]对象。 /// Dictionary类型对象转换为Json格式字符串 /// C#...
在Java编程中,我们经常需要将JSON字符串转换为对象,以便进行数据处理。本教程将详细讲解如何在Java中实现这个过程,并提供一个具体的代码实例。 首先,我们需要引入能够处理JSON的库。在Java中,常用的有`org....