关闭

Jsonlib使用PropertyNameProcessor处理属性首字母为大写的情况

3071人阅读 评论(0) 收藏 举报
分类:
package com.zzj.jsonlib;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.PropertyNameProcessor;

import com.zzj.jsonlib.vo.User;
import com.zzj.jsonlib.vo.user.Address;
import com.zzj.jsonlib.vo.user.Order;

/**
 * 使用PropertyNameProcessor处理属性首字母为大写的情况
 * @author lenovo
 *
 */
public class PropertyNameProcessorTest {
	public static void main(String[] args) {
		User user = new User("001", "123");
		List<Order> orderList = new ArrayList<Order>();
		Order order = new Order();
		Address address = new Address();
		address.setState("YN");
		order.setAddress(address);
		order.setOID("123");
		order.setOrderStatus("shipped");
		orderList.add(order);
		user.setOrderList(orderList);
		
		JsonConfig jsonConfig = new JsonConfig();
		PropertyNameProcessor propertyNameProcessor = new PropertyNameProcessor() {
			@Override
			public String processPropertyName(Class target, String fieldName) {
				System.out.println(target);
				System.out.println(fieldName);
				return fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
			}
		};
		jsonConfig.registerJsonPropertyNameProcessor(User.class, propertyNameProcessor);
		jsonConfig.registerJsonPropertyNameProcessor(Order.class, propertyNameProcessor);
		jsonConfig.registerJsonPropertyNameProcessor(Address.class, propertyNameProcessor);
		
		JSONObject jsonObject = JSONObject.fromObject(user, jsonConfig);
		String jsonStr = jsonObject.toString();
		System.out.println(jsonStr);
		
		System.out.println("-----------------------------------------------------");
		
		jsonObject = JSONObject.fromObject(jsonStr);
		jsonConfig = new JsonConfig();
		
		jsonConfig.setRootClass(User.class);
		
		Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
		classMap = new HashMap<String, Class<?>>();
		classMap.put("OrderList", Order.class);
		jsonConfig.setClassMap(classMap);
		
		propertyNameProcessor = new PropertyNameProcessor() {
			@Override
			public String processPropertyName(Class target, String elementName) {
				System.out.println(target);
				System.out.println(elementName);
				
				//处理第二个字母为大写的情况
				if (elementName.length() > 1) {
					String secondChar = elementName.substring(1, 2);
					if (secondChar.toUpperCase().equals(secondChar)) {
						return elementName;
					}
				}
				return elementName.substring(0, 1).toLowerCase() + elementName.substring(1);
			}
		};
		jsonConfig.registerJavaPropertyNameProcessor(User.class, propertyNameProcessor);
		jsonConfig.registerJavaPropertyNameProcessor(Order.class, propertyNameProcessor);
		jsonConfig.registerJavaPropertyNameProcessor(Address.class, propertyNameProcessor);
		
		user = (User) JSONObject.toBean(jsonObject, jsonConfig);
		System.out.println(user);
	}
}

User:

package com.zzj.jsonlib.vo;

import java.util.List;

import com.zzj.jsonlib.vo.user.Order;

public class User {
	private String Username;
	private String Password;
	
	private List<Order> OrderList;
	
	public User() {
	}

	public User(String username, String password) {
		Username = username;
		Password = password;
	}

	public String getUsername() {
		return Username;
	}

	public void setUsername(String username) {
		Username = username;
	}

	public String getPassword() {
		return Password;
	}

	public void setPassword(String password) {
		Password = password;
	}

	public List<Order> getOrderList() {
		return OrderList;
	}

	public void setOrderList(List<Order> orderList) {
		OrderList = orderList;
	}

	@Override
	public String toString() {
		return "User [Username=" + Username + ", Password=" + Password
				+ ", OrderList=" + OrderList + "]";
	}


}

Order:

package com.zzj.jsonlib.vo.user;

public class Order {
	private String OID;
	private String OrderStatus;
	private Address Address;

	public String getOID() {
		return OID;
	}

	public void setOID(String oID) {
		OID = oID;
	}

	public String getOrderStatus() {
		return OrderStatus;
	}

	public void setOrderStatus(String orderStatus) {
		OrderStatus = orderStatus;
	}

	public Address getAddress() {
		return Address;
	}

	public void setAddress(Address address) {
		Address = address;
	}

	@Override
	public String toString() {
		return "Order [OID=" + OID + ", OrderStatus=" + OrderStatus
				+ ", Address=" + Address + "]";
	}

}

Address:

package com.zzj.jsonlib.vo.user;

public class Address {
	private String State;

	public String getState() {
		return State;
	}

	public void setState(String state) {
		State = state;
	}

	@Override
	public String toString() {
		return "Adrress [State=" + State + "]";
	}
	
	
	
}

输出结果:

class com.zzj.jsonlib.vo.User
orderList
class com.zzj.jsonlib.vo.user.Order
OID
class com.zzj.jsonlib.vo.user.Order
address
class com.zzj.jsonlib.vo.user.Address
state
class com.zzj.jsonlib.vo.user.Order
orderStatus
class com.zzj.jsonlib.vo.User
password
class com.zzj.jsonlib.vo.User
username
{"OrderList":[{"OID":"123","Address":{"State":"YN"},"OrderStatus":"shipped"}],"Password":"123","Username":"001"}
-----------------------------------------------------
class com.zzj.jsonlib.vo.User
OrderList
class com.zzj.jsonlib.vo.user.Order
OID
class com.zzj.jsonlib.vo.user.Order
Address
class com.zzj.jsonlib.vo.user.Address
State
class com.zzj.jsonlib.vo.user.Order
OrderStatus
class com.zzj.jsonlib.vo.User
Password
class com.zzj.jsonlib.vo.User
Username
User [Username=001, Password=123, OrderList=[Order [OID=123, OrderStatus=shipped, Address=Adrress [State=YN]]]]



2
0
查看评论

net.sf.json.JsonConfig 首字母转换为小写

JsonConfig config = new JsonConfig(); config.setJavaIdentifierTransformer(new JavaIdentifierTransformer() { @Override public String transformT...
  • qq_27194783
  • qq_27194783
  • 2017-12-06 10:06
  • 58

JSON解析首字母大写的字符串

有时候我们会遇到实体的成员变量是大写的情况,而转换成JSON后首字母变成了小写,解决的办法是在实体的get方法上添加@JSONField(name = “XXX”), 我这里用的是fastjson @JSONField(name = "NAME") public ...
  • fay462298322
  • fay462298322
  • 2016-08-11 17:50
  • 2533

Java转换为JSON首字母大写

最近调接口,入参JSON首字母需大写,步骤如下: 1. package com.ceair.pojo; import java.io.Serializable; import java.util.List; import org.codehaus.jackson.annotate.JsonA...
  • b422761838
  • b422761838
  • 2016-03-15 16:39
  • 4580

fastjosn转换成字符串时首字母大小写问题

fastjson输出字符串默认首字母小写,如果想要大写(和bean一致),需要使用如下配置。 TypeUtils.compatibleWithJavaBean = true; 之前使用的1.1.*版本,该版本发现注入漏洞,公司统一升级。发现升级为1.2.28 后引入了一个bug。...
  • strawbingo
  • strawbingo
  • 2017-03-30 14:23
  • 1575

使用FastJson转换Json数据首字母大小写问题

请求Json数据的时候,传递过去的String类型转Json数据的时候经常有首字母是大写的情况,例如"LoginAccount":"02:00:00:62:73:74","LoginType":"1","Mac...
  • laughing_lh
  • laughing_lh
  • 2016-12-01 11:52
  • 5675

使用json-lib将JSONObject转Java对象,JSONArray转Java集合

使用json-lib将JSONObject转Java对象,JSONArray转Java集合
  • just4you
  • just4you
  • 2017-03-03 17:37
  • 1273

关于fastjson大小写转换问题的解决办法

关于fastjson里面处理java对象属性大小写的解决办法
  • liu0734
  • liu0734
  • 2016-04-06 17:09
  • 4076

Java 驼峰与下划线的属性名互相转换

public class StringUtil {          /**       * 转换为下划线...
  • xiaocai9999
  • xiaocai9999
  • 2017-07-13 15:26
  • 533

关于写接口 FastJson 输出json结果集 大小写问题

最近因为本来给我们 android组写接口的 java同事  去 搞公司的    云平台  大数据去了, 所以 接口这个东西 我们组也就只能自食其力辣。     然后 项目 移交给我, 就熟悉了一下    后...
  • kongbaidepao
  • kongbaidepao
  • 2015-06-24 10:11
  • 3323

Java JSONObject后首字母变小写的问题

public static String formatJson(String orgJson) { JSONObject jo = new JSONObject(); try { JSONObject jsonObject = new JSONObject(orgJson); Iterator it...
  • sunny_lv
  • sunny_lv
  • 2016-05-10 09:15
  • 2695
    个人资料
    • 访问:1314688次
    • 积分:12309
    • 等级:
    • 排名:第1403名
    • 原创:293篇
    • 转载:144篇
    • 译文:1篇
    • 评论:113条
    最新评论