关于java处理json对象的一些疑惑,求解

ek88166 2015-06-30 12:58:50
我是做C#的现在和java程序员一起开发一个程序,我用C#做后台
有以下几点问题:
1.json对象 {a:"a",b:"b"} 有2个字符串字段,如果有时a为null值或者b为null值,那么在响应他们请求的序列化操作中就会忽略为null的那个字段,结果会响应{a:"a"}或者{b:"b"}.. 对于这种情况java中无法处理么? 字段没有的话不会自动认为是null值 ??

2. 我的响应中可能会包含复杂对象, 并且代码中会对参数做详细的验证处理,如果发现传入的参数不符合要求,便会返回相应的状态码, 然后应该返回的复杂类型对象自然我也不会给它赋值,这时序列化成json时,未赋值的复杂对象就是null, 对于这种情况,java 也会不好处理?

我真是不明白。。。
...全文
514 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wedssei 2016-11-21
  • 打赏
  • 举报
回复
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 19 楼 Inhibitory 的回复:
[quote=引用 12 楼 ek88166 的回复:] [quote=引用 11 楼 Inhibitory 的回复:]
        User user = new User();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        System.out.println(mapper.writeValueAsString(user));
这样不会输出 null 的属性
换个问法,返回结果中有字段为null的情况,我这边的java开发人员要求我在服务端处理,如果为某字段为null则返回 字段:""而不是字段:null ,你觉得这样合理吗? 我是觉得这样不好。[/quote] 不好,null 和 "" 是不同的东西[/quote] 感谢回复
Inhibitory 2015-06-30
  • 打赏
  • 举报
回复
引用 14 楼 scmod 的回复:
找到个com.fasterxml.jackson的不知道是不是以前org.codehaus.jackson这个的更新... 楼主可以看下有没有Feature或者SerializeFeature之类的类 里面一般会有些序列化的选项 没有的话应该就没办法了 而且我感觉复杂对象取出来判断时候是null的话不是更方便么?怎么可以是个""空字符串呢? 总不能用复杂对象.equals("")类似这样吧.. 楼主能发下jackson是哪个不....
com.fasterxml.jackson 是 jackson 的新版本,org.codehaus.jackson 是老版本。
Inhibitory 2015-06-30
  • 打赏
  • 举报
回复
引用 12 楼 ek88166 的回复:
[quote=引用 11 楼 Inhibitory 的回复:]
        User user = new User();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        System.out.println(mapper.writeValueAsString(user));
这样不会输出 null 的属性
换个问法,返回结果中有字段为null的情况,我这边的java开发人员要求我在服务端处理,如果为某字段为null则返回 字段:""而不是字段:null ,你觉得这样合理吗? 我是觉得这样不好。[/quote] 不好,null 和 "" 是不同的东西
scmod 2015-06-30
  • 打赏
  • 举报
回复
引用 16 楼 ek88166 的回复:
感谢各位回复 , 最终他们同意在java那层做处理
我也觉得这个是处理问题...还是null好.. 尤其复杂对象貌似还找不到现成的返回""这样的
小熊123~ 2015-06-30
  • 打赏
  • 举报
回复
java对象转json,不能为null,如果字符串型null换成"",如果是日期类型
	public String getTaskInfoById(){
		log.info("根据ID查询任务信息-开始-action-getTaskInfoById");
		Map<String, String> jsonMap = new HashMap<String, String>();
		try{
			Task dd  = taskService.getTaskById(task.getId());

			//对象转json时,对象中日期格式数据不能为空
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			dd.setFromDate(sdf.parse("1990-01-01"));
			dd.setToDate(sdf.parse("2500-01-01"));
			
			result = JSONObject.fromObject(dd);
		}catch(Exception e){
			jsonMap.put("resultdsc", "查询任务信息出错");
			jsonMap.put("result", "false");
			result = JSONObject.fromObject(jsonMap);
			log.debug("查询任务信息异常:"+e.getMessage());
		}
		log.info("根据ID查询任务信息-结束-action-getTaskInfoById");
		return SUCCESS;
	}
ek88166 2015-06-30
  • 打赏
  • 举报
回复
感谢各位回复 , 最终他们同意在java那层做处理
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 14 楼 scmod 的回复:
找到个com.fasterxml.jackson的不知道是不是以前org.codehaus.jackson这个的更新... 楼主可以看下有没有Feature或者SerializeFeature之类的类 里面一般会有些序列化的选项 没有的话应该就没办法了 而且我感觉复杂对象取出来判断时候是null的话不是更方便么?怎么可以是个""空字符串呢? 总不能用复杂对象.equals("")类似这样吧.. 楼主能发下jackson是哪个不....
0.0 我不是做java的,是做c# 所以你要的jackson是哪个我不知道。。。 是的 如果是没赋值的字段就用默认值我也是觉得最好 ,可能他们以前的做法是""空字符串 习惯问题。。?
scmod 2015-06-30
  • 打赏
  • 举报
回复
找到个com.fasterxml.jackson的不知道是不是以前org.codehaus.jackson这个的更新... 楼主可以看下有没有Feature或者SerializeFeature之类的类 里面一般会有些序列化的选项 没有的话应该就没办法了 而且我感觉复杂对象取出来判断时候是null的话不是更方便么?怎么可以是个""空字符串呢? 总不能用复杂对象.equals("")类似这样吧.. 楼主能发下jackson是哪个不....
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 12 楼 ek88166 的回复:
[quote=引用 11 楼 Inhibitory 的回复:]
        User user = new User();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        System.out.println(mapper.writeValueAsString(user));
这样不会输出 null 的属性
换个问法,返回结果中有字段为null的情况,我这边的java开发人员要求我在服务端处理,如果为某字段为null则返回 字段:""而不是字段:null ,你觉得这样合理吗? 我是觉得这样不好。[/quote] 我是觉得这种情况应该在客户端也就是java那边处理。
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 11 楼 Inhibitory 的回复:
        User user = new User();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        System.out.println(mapper.writeValueAsString(user));
这样不会输出 null 的属性
换个问法,返回结果中有字段为null的情况,我这边的java开发人员要求我在服务端处理,如果为某字段为null则返回 字段:""而不是字段:null ,你觉得这样合理吗? 我是觉得这样不好。
Inhibitory 2015-06-30
  • 打赏
  • 举报
回复
        User user = new User();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        System.out.println(mapper.writeValueAsString(user));
这样不会输出 null 的属性
放纵的青春 2015-06-30
  • 打赏
  • 举报
回复
可以要求他把null对象的节点也拼出来 而不是少掉这个节点
Inhibitory 2015-06-30
  • 打赏
  • 举报
回复
jackson
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 7 楼 Inhibitory 的回复:
1.json对象 {a:"a",b:"b"} 有2个字符串字段,如果有时a为null值或者b为null值,那么在响应他们请求的序列化操作中就会忽略为null的那个字段,结果会响应{a:"a"}或者{b:"b"}.. 对于这种情况java中无法处理么? 字段没有的话不会自动认为是null值 ?? 没有的字段自动忽略
不知道你是用哪个包去解析的 ?
Inhibitory 2015-06-30
  • 打赏
  • 举报
回复
1.json对象 {a:"a",b:"b"} 有2个字符串字段,如果有时a为null值或者b为null值,那么在响应他们请求的序列化操作中就会忽略为null的那个字段,结果会响应{a:"a"}或者{b:"b"}.. 对于这种情况java中无法处理么? 字段没有的话不会自动认为是null值 ?? 没有的字段自动忽略
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
不会的,如果她是用其他jar 转化的话,看看是不是jar 包的问题,正常的不会出现。
我也觉得是他们用的包有问题, 但是我这么跟他们说 得到的回复是所有的都处理不了都一样,,也是醉了~
ek88166 2015-06-30
  • 打赏
  • 举报
回复
引用 4 楼 ek88166 的回复:
回复2楼: 第二个问题是说 { a:"a",b:{ c:"c", d:"d" } },b就是一个复杂类型。 如果我不给b赋值么 就会返回 { a:"a", b:null }, 结果他们跟我说不好处理非要我返回空字符串也就是""
就是{ a:"a", b:"" }这样的格式
ek88166 2015-06-30
  • 打赏
  • 举报
回复
回复2楼: 第二个问题是说 { a:"a",b:{ c:"c", d:"d" } },b就是一个复杂类型。 如果我不给b赋值么 就会返回 { a:"a", b:null }, 结果他们跟我说不好处理非要我返回空字符串也就是""
tony4geek 2015-06-30
  • 打赏
  • 举报
回复
不会的,如果她是用其他jar 转化的话,看看是不是jar 包的问题,正常的不会出现。
加载更多回复(2)

50,451

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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