关于JSONObject解析json数据,获取不到指定key的问题

上帝有好生之德 2012-04-11 11:59:53
调用别家的api接口返回的参数名首字母是大写的,而根据JSONObject解析方式是不支持参数名首字母大写,有人遇到过这个问题么?有啥解决方案。
json数据如下:
{"AutoCode":"1"}

bean如下:
public class AutoCode {
private String AutoCode;

public String getAutoCode() {
return AutoCode;
}

public void setAutoCode(String AutoCode) {
this.AutoCode = AutoCode;
}

}

控制台输出:2012-4-11 12:01:22 net.sf.json.JSONObject toBean
警告: Tried to assign property AutoCode:java.lang.String to bean of class com.roiland.bean.AutoCode
把json数据首字母小写就ok了,但是这个数据不是我们能控制的,希望能提供类似JSONObject键值对重写之类的方法。
...全文
7286 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞啊子 2013-06-21
  • 打赏
  • 举报
回复
可以使用google-gson,不会强制你小写的。 并且JSONObject这种,在android下是不行的,有冲突。
m_1988 2013-03-18
  • 打赏
  • 举报
回复
JSONObject put进入的东西 怎样实现排序?有没有人遇到过?
xuanbingaihuo 2012-09-10
  • 打赏
  • 举报
回复
今天做项目也遇到同样的问题,不知道楼主是如何解决的,可否分享下经验,谢谢
shine333 2012-04-11
  • 打赏
  • 举报
回复
    String json = "{\"AutoCode\":\"1\"}";
JSONObject jsonObject = JSONObject.fromObject(json);
JsonConfig config = new JsonConfig();
config.setJavaIdentifierTransformer(new JavaIdentifierTransformer() {


@Override
public String transformToJavaIdentifier(String str) {
char[] chars = str.toCharArray();
chars[0] = Character.toLowerCase(chars[0]);
return new String(chars);
}

});
config.setRootClass(Test.class);
Object bean = JSONObject.toBean(jsonObject , config);
System.out.println(bean);
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

transformToJavaIdentifier接口,就是传进来JSON中的key,返回JavaBean中的property,甚至可以毫无关系的两个值
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
[/Quote]
恩,api里竟然有用Class当字段名的,在javabean里根本写不了get&set方法,得用你的方式重新起名
shine333 2012-04-11
  • 打赏
  • 举报
回复
transformToJavaIdentifier接口,就是传进来JSON中的key,返回JavaBean中的property,甚至可以毫无关系的两个值
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Java code
String json = "{\"AutoCode\":\"1\"}";
JSONObject jsonObject = JSONObject.fromObject(json);
JsonConfig config = new JsonConfig();
config.setJavaIdentifierTransformer(new Jav……
[/Quote]
厉害,无视大小写了,而且不影响value的大小写
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

如果你们几乎所有JSON处理都有这个问题,专门写个JavaIdentifierTransformer类,甚至是专门定制一个全局的JsonConfig对象
[/Quote]
这个JsonConfig里没看到有配置忽略大小写的配置,能讲下怎么配能搞定这种问题么?
  • 打赏
  • 举报
回复
这个好像是由于java的get和set方法导致的,不论你写autoCode还是AutoCode的都是getAutoCode,JSONObject封装数据的时候就认为字段名应该是autoCode
shine333 2012-04-11
  • 打赏
  • 举报
回复
如果你们几乎所有JSON处理都有这个问题,专门写个JavaIdentifierTransformer类,甚至是专门定制一个全局的JsonConfig对象
shine333 2012-04-11
  • 打赏
  • 举报
回复
setRootClass(AutoCode.class);

用好JsonConfig,然后其中的JavaIdentifierTransformer还有其他功能需要考虑,
比如json中的"xxx yyyy" ==> "xxxYyyy" 或者诸如此类,可以参考JavaIdentifierTransformer中几个默认的实现。

81,092

社区成员

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

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