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键值对重写之类的方法。
11 个解决方案
#1
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);
#2
setRootClass(AutoCode.class);
用好JsonConfig,然后其中的JavaIdentifierTransformer还有其他功能需要考虑,
比如json中的"xxx yyyy" ==> "xxxYyyy" 或者诸如此类,可以参考JavaIdentifierTransformer中几个默认的实现。
用好JsonConfig,然后其中的JavaIdentifierTransformer还有其他功能需要考虑,
比如json中的"xxx yyyy" ==> "xxxYyyy" 或者诸如此类,可以参考JavaIdentifierTransformer中几个默认的实现。
#3
如果你们几乎所有JSON处理都有这个问题,专门写个JavaIdentifierTransformer类,甚至是专门定制一个全局的JsonConfig对象
#4
这个好像是由于java的get和set方法导致的,不论你写autoCode还是AutoCode的都是getAutoCode,JSONObject封装数据的时候就认为字段名应该是autoCode
#5
这个JsonConfig里没看到有配置忽略大小写的配置,能讲下怎么配能搞定这种问题么?
#6
厉害,无视大小写了,而且不影响value的大小写
#7
transformToJavaIdentifier接口,就是传进来JSON中的key,返回JavaBean中的property,甚至可以毫无关系的两个值
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
#8
恩,api里竟然有用Class当字段名的,在javabean里根本写不了get&set方法,得用你的方式重新起名
#9
今天做项目也遇到同样的问题,不知道楼主是如何解决的,可否分享下经验,谢谢
#10
JSONObject put进入的东西 怎样实现排序?有没有人遇到过?
#11
可以使用google-gson,不会强制你小写的。
并且JSONObject这种,在android下是不行的,有冲突。
并且JSONObject这种,在android下是不行的,有冲突。
#1
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);
#2
setRootClass(AutoCode.class);
用好JsonConfig,然后其中的JavaIdentifierTransformer还有其他功能需要考虑,
比如json中的"xxx yyyy" ==> "xxxYyyy" 或者诸如此类,可以参考JavaIdentifierTransformer中几个默认的实现。
用好JsonConfig,然后其中的JavaIdentifierTransformer还有其他功能需要考虑,
比如json中的"xxx yyyy" ==> "xxxYyyy" 或者诸如此类,可以参考JavaIdentifierTransformer中几个默认的实现。
#3
如果你们几乎所有JSON处理都有这个问题,专门写个JavaIdentifierTransformer类,甚至是专门定制一个全局的JsonConfig对象
#4
这个好像是由于java的get和set方法导致的,不论你写autoCode还是AutoCode的都是getAutoCode,JSONObject封装数据的时候就认为字段名应该是autoCode
#5
这个JsonConfig里没看到有配置忽略大小写的配置,能讲下怎么配能搞定这种问题么?
#6
厉害,无视大小写了,而且不影响value的大小写
#7
transformToJavaIdentifier接口,就是传进来JSON中的key,返回JavaBean中的property,甚至可以毫无关系的两个值
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
比如JSON的"jsonKey" ---> JavaBean的 "javaProperty"
#8
恩,api里竟然有用Class当字段名的,在javabean里根本写不了get&set方法,得用你的方式重新起名
#9
今天做项目也遇到同样的问题,不知道楼主是如何解决的,可否分享下经验,谢谢
#10
JSONObject put进入的东西 怎样实现排序?有没有人遇到过?
#11
可以使用google-gson,不会强制你小写的。
并且JSONObject这种,在android下是不行的,有冲突。
并且JSONObject这种,在android下是不行的,有冲突。