javaBean转换为json怎么实现指定属性名风格,如驼峰驼峰命名法和下划线线两种

JAVA利用反射映射JSON对象为JavaBean - 博客频道 - CSDN.NET
name_liv的专栏
分类:java基础
关于将JSONObject转换为JavaBean,其实在JSONObject中有对于的toBean()方法来处理,还可以根据给定的JsonConfig来处理一些相应的要求,比如过滤指定的属性
//返回true表示过滤掉该属性
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object o, String n, Object v) {
给某些属性设置默认值
//在序列化为json时,将Integer对象设为null
jsonConfig.registerDefaultValueProcessor(Integer.class,
new DefaultValueProcessor() {
@SuppressWarnings(&unchecked&)
public Object getDefaultValue(Class type) {
return &&;
还有其它的一些有用的方法,这里就不一一介绍了...,但是在实际应用中,被转换为json对象的JavaBean中的属性,可能也是一个JSON对象或者JSON数组,但是在属性中是一个String类型。这样,在将json对象转换成JavaBean的过程中就会导致类型转换失败。查找了JsonConfig的方法,并没有找到可以在json--&bean的过程中将JSONObject或JSONArray处理为String的方法,因此只能使用反射来完成特殊对象的映射了。
此处需要注意:
当JSONObject遇到Json串是null的时候,会返回JSONNUll
因此在判断为空的时候需要特别注意。
public static ExamBLOBs parseJsonToExam(JSONObject obj) {
ExamBLOBs exam = new ExamBLOBs ();
List&Field& fieldList = new ArrayList&Field&();
.addAll(Arrays.asList(exam.getClass().getDeclaredFields()));
for (Field field : fieldList) {
String name = field.getName();
Object value = obj.get(name);
if (value != null && !(value instanceof JSONNull)) {
//使其可以对私有属性复制
field.setAccessible(true);
if (name.equalsIgnoreCase(&Option&)) {
JSONArray jArr = (JSONArray)
field.set(exam, jArr.toString());
String type = field.getType().toString();
if (type.indexOf(&Integer&) &= 0) {
field.set(exam, (Integer) value);
} else if (type.indexOf(&String&) &= 0) {
field.set(exam, (String) value);
} else if (type.indexOf(&Date&) &= 0) {
JSONObject dataObj = (JSONObject)
field.set(exam,
JSONObject.toBean(dataObj, Date.class));
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
name_liweibin
排名:第16848名
(10)(6)(15)(14)(50)(6)(1)(1)(4)(1)(1)(1)(0)(0)(0)(1)(1)(1)驼峰命名法(CamelCase)和下划线风格(UnderScoreCase)字符串之间的转换工具类 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 16时,
CamelCaseUtils.toCamelCase(&hello_world&) == &helloWorld&
CamelCaseUtils.
toCapitalizeCamelCase(&hello_world&) == &HelloWorld& CamelCaseUtils.toUnderScoreCase(&helloWorld&) = &hello_world&
代码片段(1)
1.&[代码][Java]代码&&&&
public class CamelCaseUtils {
private static final char SEPARATOR = '_';
public static String toUnderlineName(String s) {
if (s == null) {
StringBuilder sb = new StringBuilder();
boolean upperCase =
for (int i = 0; i & s.length(); i++) {
char c = s.charAt(i);
boolean nextUpperCase =
if (i & (s.length() - 1)) {
nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
if ((i &= 0) && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) {
if (i & 0) sb.append(SEPARATOR);
upperCase =
upperCase =
sb.append(Character.toLowerCase(c));
return sb.toString();
public static String toCamelCase(String s) {
if (s == null) {
s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s.length());
boolean upperCase =
for (int i = 0; i & s.length(); i++) {
char c = s.charAt(i);
if (c == SEPARATOR) {
upperCase =
} else if (upperCase) {
sb.append(Character.toUpperCase(c));
upperCase =
sb.append(c);
return sb.toString();
public static String toCapitalizeCamelCase(String s) {
if (s == null) {
s = toCamelCase(s);
return s.substring(0, 1).toUpperCase() + s.substring(1);
public static void main(String[] args) {
System.out.println(CamelCaseUtils.toUnderlineName("ISOCertifiedStaff"));
System.out.println(CamelCaseUtils.toUnderlineName("CertifiedStaff"));
System.out.println(CamelCaseUtils.toUnderlineName("UserID"));
System.out.println(CamelCaseUtils.toCamelCase("iso_certified_staff"));
System.out.println(CamelCaseUtils.toCamelCase("certified_staff"));
System.out.println(CamelCaseUtils.toCamelCase("user_id"));
开源中国-程序员在线工具:
相关的代码(843)
大神,什么意思啊,不明白啊,能说中文吗?
2楼:Socket378 发表于
&貌似把字符串内容转换成驼峰命名法的!
3楼:天天天 发表于
能简单点不?
4楼:JerryMeng 发表于
有用吗,用这么麻烦吗?
5楼:wxdeer 发表于
在这个方法toUnderScoreCase中,boolean变量的真正作用,或者说是否可有可无
6楼:_bill 发表于
只要不是该死的匈牙利命名,怎么都行
7楼:宋强哲 发表于
这个很不错```很好用...谢谢啊.
8楼:黄勇 发表于
// 将驼峰风格替换为下划线风格
public static String toUnderline(String str) {
& & Matcher matcher = pile(&[A-Z]&).matcher(str);
& & StringBuilder builder = new StringBuilder(str);
& & for (int i = 0; matcher.find(); i++) {
& & & & builder.replace(matcher.start() + i, matcher.end() + i, &_& + matcher.group().toLowerCase());
& & if (builder.charAt(0) == '_') {
& & & & builder.deleteCharAt(0);
& & return builder.toString();
// 将下划线风格替换为驼峰风格
public static String toCamelhump(String str) {
& & Matcher matcher = pile(&_[a-z]&).matcher(str);
& & StringBuilder builder = new StringBuilder(str);
& & for (int i = 0; matcher.find(); i++) {
& & & & builder.replace(matcher.start() - i, matcher.end() - i, matcher.group().substring(1).toUpperCase());
& & if (Character.isUpperCase(builder.charAt(0))) {
& & & & builder.replace(0, 1, String.valueOf(Character.toLowerCase(builder.charAt(0))));
& & return builder.toString();
9楼:ChineHE 发表于
guava里面有现成的api吧
10楼:何庭耀 发表于
大神,譬如说这种情况ISOCertifiedStaff,应该转成iso_certified_staff,但你的程序却转成了
i_so_certified_staff,请问应该怎么改?
11楼:Sub 发表于
引用来自“何庭耀”的评论大神,譬如说这种情况ISOCertifiedStaff,应该转成iso_certified_staff,但你的程序却转成了
i_so_certified_staff,请问应该怎么改?代码已经更新,修复了该问题!
12楼:老四 发表于
你这不是Minidao里面工具类呢
13楼:alexxiyang 发表于
可以直接用&
camel-name-utils
/alexxiyang/camel-name-utils&
不用增加整个Guava进去,太重了
开源从代码分享开始
Sub的其它代码有什么框架可以做不规则多边形的菜单? - 开源中国社区
当前访客身份:游客 [
当前位置:
怎么做这种特效菜单,每个6边形块 都有鼠标特效和链接,有什么插件做吗?
---------------问题补充---------------
:需要现成的插件。。。。
共有4个答案
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
直接用图片怎么样?或者用CSS3,看看。
<span class="a_vote_num" id="a_vote_num_
你是桌面还是网页呢?
--- 共有 2 条评论 ---
: css3或者svg,如果图形都是规则的,可以用背景图配合map标签做。
(2年前)&nbsp&
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
更多开发者职位上
有什么技术问题吗?
Dreampi...的其它问题
类似的话题Json与javaBean之间的转换工具类 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 22时,
&* Json与javaBean之间的转换工具类
&* @author 晚风工作室
&* @version
&现使用json-lib组件实现
&* &&&需要
&* &&&&json-lib-2.4-jdk15.jar
&* &&&&ezmorph-1.0.6.jar
&* &&&&commons-collections-3.1.jar
&* &&&&commons-lang-2.0.jar
&* &&&支持
代码片段(5)
1.&[代码]Json与javaBean之间的转换工具类&&&&
import java.lang.reflect.F
import java.util.ArrayL
import java.util.HashM
import java.util.I
import java.util.L
import java.util.M
import java.util.S
import net.sf.json.JSONA
import net.sf.json.JSONO
import net.sf.json.JsonC
* Json与javaBean之间的转换工具类
* @author 晚风工作室
* @version
* {@code 现使用json-lib组件实现
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
commons-collections-3.1.jar
commons-lang-2.0.jar
public class JsonPluginsUtil {
* 从一个JSON 对象字符格式中得到一个java对象
* @param jsonString
* @param beanCalss
@SuppressWarnings("unchecked")
public static &T& T jsonToBean(String jsonString, Class&T& beanCalss) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
T bean = (T) JSONObject.toBean(jsonObject, beanCalss);
* 将java对象转换成json字符串
* @param bean
public static String beanToJson(Object bean) {
JSONObject json = JSONObject.fromObject(bean);
return json.toString();
* 将java对象转换成json字符串
* @param bean
public static String beanToJson(Object bean, String[] _nory_changes, boolean nory) {
JSONObject json =
if(nory){//转换_nory_changes里的属性
Field[] fields = bean.getClass().getDeclaredFields();
String str = "";
for(Field field : fields){
System.out.println(field.getName());
str+=(":"+field.getName());
fields = bean.getClass().getSuperclass().getDeclaredFields();
for(Field field : fields){
System.out.println(field.getName());
str+=(":"+field.getName());
for(String s : _nory_changes){
str = str.replace(":"+s+":", ":");
json = JSONObject.fromObject(bean,configJson(str.split(":")));
}else{//转换除了_nory_changes里的属性
json = JSONObject.fromObject(bean,configJson(_nory_changes));
return json.toString();
private static JsonConfig configJson(String[] excludes) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
jsonConfig.registerJsonValueProcessor(Date.class,
new DateJsonValueProcessor(datePattern));
return jsonC
* 将java对象List集合转换成json字符串
* @param beans
@SuppressWarnings("unchecked")
public static String beanListToJson(List beans) {
StringBuffer rest = new StringBuffer();
rest.append("[");
int size = beans.size();
for (int i = 0; i & i++) {
rest.append(beanToJson(beans.get(i))+((i&size-1)?",":""));
rest.append("]");
return rest.toString();
* @param beans
* @param _no_changes
@SuppressWarnings("unchecked")
public static String beanListToJson(List beans, String[] _nory_changes, boolean nory) {
StringBuffer rest = new StringBuffer();
rest.append("[");
int size = beans.size();
for (int i = 0; i & i++) {
rest.append(beanToJson(beans.get(i),_nory_changes,nory));
if(i&size-1){
rest.append(",");
}catch(Exception e){
e.printStackTrace();
rest.append("]");
return rest.toString();
* 从json HASH表达式中获取一个map,改map支持嵌套功能
* @param jsonString
@SuppressWarnings({ "unchecked" })
public static Map jsonToMap(String jsonString) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Iterator keyIter = jsonObject.keys();
Map valueMap = new HashMap();
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key).toString();
valueMap.put(key, value);
return valueM
* map集合转换成json格式数据
* @param map
public static String mapToJson(Map&String, ?& map, String[] _nory_changes, boolean nory){
String s_json = "{";
Set&String& key = map.keySet();
for (Iterator&?& it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
if(map.get(s) == null){
}else if(map.get(s) instanceof List&?&){
s_json+=(s+":"+JsonPluginsUtil.beanListToJson((List&?&)map.get(s), _nory_changes, nory));
JSONObject json = JSONObject.fromObject(map);
s_json += (s+":"+json.toString());;
if(it.hasNext()){
s_json+=",";
s_json+="}";
* 从json数组中得到相应java数组
* @param jsonString
public static Object[] jsonToObjectArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
return jsonArray.toArray();
public static String listToJson(List&?& list) {
JSONArray jsonArray = JSONArray.fromObject(list);
return jsonArray.toString();
* 从json对象集合表达式中得到一个java对象列表
* @param jsonString
* @param beanClass
@SuppressWarnings("unchecked")
public static &T& List&T& jsonToBeanList(String jsonString, Class&T& beanClass) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
JSONObject jsonO
int size = jsonArray.size();
List&T& list = new ArrayList&T&(size);
for (int i = 0; i & i++) {
jsonObject = jsonArray.getJSONObject(i);
bean = (T) JSONObject.toBean(jsonObject, beanClass);
list.add(bean);
* 从json数组中解析出java字符串数组
* @param jsonString
public static String[] jsonToStringArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
String[] stringArray = new String[jsonArray.size()];
int size = jsonArray.size();
for (int i = 0; i & i++) {
stringArray[i] = jsonArray.getString(i);
return stringA
* 从json数组中解析出javaLong型对象数组
* @param jsonString
public static Long[] jsonToLongArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Long[] longArray = new Long[size];
for (int i = 0; i & i++) {
longArray[i] = jsonArray.getLong(i);
return longA
* 从json数组中解析出java Integer型对象数组
* @param jsonString
public static Integer[] jsonToIntegerArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Integer[] integerArray = new Integer[size];
for (int i = 0; i & i++) {
integerArray[i] = jsonArray.getInt(i);
return integerA
* 从json数组中解析出java Double型对象数组
* @param jsonString
public static Double[] jsonToDoubleArray(String jsonString) {
JSONArray jsonArray = JSONArray.fromObject(jsonString);
int size = jsonArray.size();
Double[] doubleArray = new Double[size];
for (int i = 0; i & i++) {
doubleArray[i] = jsonArray.getDouble(i);
return doubleA
json-lib-2.1.jar&~&122KB&&&&
ezmorph-1.0.6.jar&~&84KB&&&&
commons-collections-3.2.jar&~&558KB&&&&
commons-lang-2.5.jar&~&273KB&&&&
开源中国-程序员在线工具:
相关的代码(49)
4回/150822阅
[JavaScript]
12回/29457阅
20回/27659阅
27回/18001阅
9回/17670阅
5回/11187阅
[JavaScript]
12回/10889阅
10回/10075阅
0回/10090阅
2回/9941阅
[JavaScript]
换用别的组件吧
2楼:车开源 发表于
学习下,还有更好的方法吗?
3楼:晚风工作室 发表于
好与不好都是相对来讲,如果这个东西已经能够满足你的需求,很显然是肯定的。我只是把平常常用的封装了下 更符合项目而已
欢迎大大们指点
4楼:老北 发表于
hibernate的实体类 好像转换有问题?如何解决?
5楼:晚风工作室 发表于
这。。。实体类没有关联关系的话是可以处理的,但关联关系转换的时候确实会不支持,json格式数据也没那么强,所以就是那种简单的json处理
6楼:帝国战士 发表于
直接用gson 就可以了 哪有这么复杂啊
7楼:晚风工作室 发表于
封装 与第三方jar包隔离
& 仁者见仁智者见智 呵呵
8楼:silent_lilu 发表于
使用Fastjson速度不是一般的快
9楼:朱念 发表于
net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
10楼:朱念 发表于
将bean对象放在list里,调用beanListToJson这个方法,报异常
net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
net.sf.json.JSONObject.fromObject(JSONObject.java:180)
net.sf.json.JSONObject.fromObject(JSONObject.java:145)
com.zhunian.util.JsonHelper.beanToJson(JsonHelper.java:49)
com.zhunian.util.JsonHelper.beanListToJson(JsonHelper.java:106)
com.zhunian.action.PatientAction.list(PatientAction.java:52)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
11楼:JianXinTan 发表于
beanToJson(Object bean, String[] _nory_changes,booleannory) 的具体是用来做什么的,没弄懂,求指点指点哈,最好有实例啥的
12楼:fengzi86 发表于
在线json格式化校验 json转换到javabean类&
13楼:小薇 发表于
json转javabean工具
14楼:逐雅斋 发表于
开源从代码分享开始
晚风工作室的其它代码

我要回帖

更多关于 fastjson 驼峰 下划线 的文章

 

随机推荐