java json嵌套解析

sureballse 2016-06-16 10:44:40
如题
String value = "{{'startTime': {'l': '08:30', 'r': '09:00'},'endTime': {'l': '11:30', 'r': '12:00'}},{'startTime': {'l': '14:00', 'r': '14:30'},'endTime': {'l': '17:30', 'r': '18:00'}}}";
现在希望可以将其解析,小白一枚,搞了两天了。。。求助攻啊。。。。。
感激不尽
...全文
221 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
解开者 2016-06-16
  • 打赏
  • 举报
回复
对楼上的补充:JSONObject会被解析为LinkedHashMap 此外很重要的一点:Jackson是可以识别泛型的!因此,通过合理组合带泛型的集合类,理论上可以表示任意多层嵌套的json对象,并通过一次read或write操作完成转换
解开者 2016-06-16
  • 打赏
  • 举报
回复
引用 4 楼 sureballse 的回复:
恩恩 确实是写错了 可是#3大神 我就是不是很懂解析的过程啊 我是建了一个类 period public class period { public Map<String,Object> startTime; public Map<String,Object> endTime; } 现在用 ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); String value = "[{'startTime': {'l': '08:30', 'r': '09:00'},'endTime': {'l': '11:30', 'r': '12:00'}},{'startTime': {'l': '14:00', 'r': '14:30'},'endTime': {'l': '17:30', 'r': '18:00'}}]"; List<period> a = mapper.readValue(value, List.class); for (Iterator iter = a.iterator(); iter.hasNext();) { System.out.println(iter.next().get("startTime")); } 可以遍历出这个结果。。。 {startTime={l=08:30, r=09:00}, endTime={l=11:30, r=12:00}} {startTime={l=14:00, r=14:30}, endTime={l=17:30, r=18:00}} 应该是都是map类型 可是接下来我不会了啊。
Jackson解析是可以一步到位的,所有写代码时可以确定的json结构都可以定义成DTO(可以嵌套内部类) 如果不定义类,Jackson默认解析为LinkedHashMap 推荐用DTO,数据流转更清晰
class Period {
	Region startTime;
	Region endTime;
	private class Region {
		String l;
		String r;
	}
}
sureballse 2016-06-16
  • 打赏
  • 举报
回复
恩恩 确实是写错了 可是#3大神 我就是不是很懂解析的过程啊 我是建了一个类 period public class period { public Map<String,Object> startTime; public Map<String,Object> endTime; } 现在用 ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); String value = "[{'startTime': {'l': '08:30', 'r': '09:00'},'endTime': {'l': '11:30', 'r': '12:00'}},{'startTime': {'l': '14:00', 'r': '14:30'},'endTime': {'l': '17:30', 'r': '18:00'}}]"; List<period> a = mapper.readValue(value, List.class); for (Iterator iter = a.iterator(); iter.hasNext();) { System.out.println(iter.next().get("startTime")); } 可以遍历出这个结果。。。 {startTime={l=08:30, r=09:00}, endTime={l=11:30, r=12:00}} {startTime={l=14:00, r=14:30}, endTime={l=17:30, r=18:00}} 应该是都是map类型 可是接下来我不会了啊。
Akuma_lht 2016-06-16
  • 打赏
  • 举报
回复
定义一个类Times 其中有属性 Time[] time Time类中有属性 StartTime startTime和EndTime endTime 然后这两个类里都有属性String l 和String r 注意量名和属性名必须一致否则无法注入。 然后把你接收到的字符串先转为jsonobject对象。接着再把对象转化为Times对象

JSONObject unitsJsonObject = JSONObject.fromObject(unitsMsg);//msg为接收到的json字符串
		
		Times times = (Times)JSONObject.toBean(unitsJsonObject, Times.class); //这个就是解析获得的对象
  • 打赏
  • 举报
回复
没试过, 不知道单引号行不行。
首先你这不是一个json格式的对象。
你这应该是个json格式的数组,最外层应该是中括号[]
你把代码稍微改改就行了
qq_15915835 2016-06-16
  • 打赏
  • 举报
回复
json字符串写错了吧。看那意思是jsonarry 应该是 “[{'startTime': {'l': '08:30', 'r': '09:00'},'endTime': {'l': '11:30', 'r': '12:00'}},{'startTime': {'l': '14:00', 'r': '14:30'},'endTime': {'l': '17:30', 'r': '18:00'}}]"
解开者 2016-06-16
  • 打赏
  • 举报
回复
我仍然推荐用Jackson,对于MVC模式来说可以完全用Model而不是Controller,并且可以无缝对接Spring都是竞争力。 解析json字符串得到的java对象,通过Jackson也能方便地重新格式化为json字符串。 用代码逻辑来解析数据始终不是什么好事,在数据结构变化的时候不得不同时修改耦合在业务逻辑中的解析逻辑,会造成维护压力。
import java.io.IOException;
import java.util.List;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.type.JavaType;

public class JacksonTest {
	public static void main(String[] args) throws IOException {
		String s = "[{\"startTime\":{\"l\":\"08:30\",\"r\":\"09:00\"},\"endTime\":{\"l\":\"11:30\",\"r\":\"12:00\"}},{\"startTime\":{\"l\":\"14:00\",\"r\":\"14:30\"},\"endTime\": {\"l\":\"17:30\",\"r\":\"18:00\"}}]";
		ObjectMapper mapper = new ObjectMapper();
		JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, Period.class);
		List<Period> list = mapper.readValue(s, javaType);
		System.out.println(list);
		String t = new ObjectMapper().enable(SerializationConfig.Feature.INDENT_OUTPUT).writeValueAsString(list);
		System.out.println(t);
	}
}

class Period {
	public Region startTime;
	public Region endTime;

	public static class Region {
		public String l;
		public String r;

		@Override
		public String toString() {
			return String.format("Region [l=%s, r=%s]", l, r);
		}
	}

	@Override
	public String toString() {
		return String.format("Period [startTime=%s, endTime=%s]", startTime, endTime);
	}
}
输出如下: [Period [startTime=Region [l=08:30, r=09:00], endTime=Region [l=11:30, r=12:00]], Period [startTime=Region [l=14:00, r=14:30], endTime=Region [l=17:30, r=18:00]]] [ { "startTime" : { "l" : "08:30", "r" : "09:00" }, "endTime" : { "l" : "11:30", "r" : "12:00" } }, { "startTime" : { "l" : "14:00", "r" : "14:30" }, "endTime" : { "l" : "17:30", "r" : "18:00" } } ]
sureballse 2016-06-16
  • 打赏
  • 举报
回复
感谢各位~~~~~~~~~~~怎么不会针对某一楼进行回复呢
sureballse 2016-06-16
  • 打赏
  • 举报
回复
太感谢啦 太棒啦 还是我自己基础不好 真的十分感谢
  • 打赏
  • 举报
回复
7、8楼都可以 建议7楼
  • 打赏
  • 举报
回复

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
 
 
public class JSON {
    public static void main(String[] args) {
        String  s = "[{\"startTime\": {\"l\": \"08:30\", \"r\": \"09:00\"},\"endTime\": {\"l\": \"11:30\", \"r\": \"12:00\"}},{\"startTime\": {\"l\": \"14:00\", \"r\": \"14:30\"},\"endTime\": {\"l\": \"17:30\", \"r\": \"18:00\"}}]";
        JSONArray ja = JSONArray.fromObject(s);
        for (int i = 0; i <ja.size(); i++) {
            JSONObject jo = JSONObject.fromObject(ja.get(i));
            Been startTimeBeen = (Been)JSONObject.toBean(jo.getJSONObject("startTime"), Been.class);
            Been endTimeBeen = (Been)JSONObject.toBean(jo.getJSONObject("endTime"), Been.class);
            System.out.println(startTimeBeen.l + startTimeBeen.r + endTimeBeen.l + endTimeBeen.r);
        }
    }
}



public class Been {
    	String l;
    	String r;
		public String getL() {
			return l;
		}
		public void setL(String l) {
			this.l = l;
		}
		public String getR() {
			return r;
		}
		public void setR(String r) {
			this.r = r;
		}
}

打印 08:3009:0011:3012:00 14:0014:3017:3018:00
  • 打赏
  • 举报
回复

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class JSON {
	public static void main(String[] args) {
		String  s = "[{\"startTime\": {\"l\": \"08:30\", \"r\": \"09:00\"},\"endTime\": {\"l\": \"11:30\", \"r\": \"12:00\"}},{\"startTime\": {\"l\": \"14:00\", \"r\": \"14:30\"},\"endTime\": {\"l\": \"17:30\", \"r\": \"18:00\"}}]";
		JSONArray ja = JSONArray.fromObject(s);
		for (int i = 0; i <ja.size(); i++) {
			JSONObject jo = JSONObject.fromObject(ja.get(i));
			JSONObject startTime = jo.getJSONObject("startTime");
			JSONObject endTime = jo.getJSONObject("endTime");
			System.out.println("startTime.l=" + startTime.getString("l") + "startTime.r=" + startTime.getString("r") + "endTime.l=" + endTime.getString("l") + "endTime.r=" + endTime.getString("r"));
		}
	}
}
//打印 startTime.l=08:30startTime.r=09:00 endTime.l=11:30endTime.r=12:00 startTime.l=14:00startTime.r=14:30 endTime.l=17:30endTime.r=18:00

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧