先寫個JSON和List的互轉程式
pom.xml
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20140107</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
※java版本太高(7、8)要降版
※org.json選較低版本即可, net.sf要加一行classifier
org.json
import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; public class OrgJSONTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); JSONObject jObj = new JSONObject(); jObj.put("interest", list); System.out.println(jObj);// {"interest":["A","B","C"]} JSONArray jArray = jObj.getJSONArray("interest");// get()也可以 List<String> rtn = new ArrayList<>(); for (int i = 0; i < jArray.length(); i++) { rtn.add(jArray.getString(i)); } System.out.println(rtn);// [A, B, C] } }
net.sf.json
import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class NetSfJSONTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); JSONObject jObj = new JSONObject(); jObj.put("interest", JSONArray.fromObject(list)); System.out.println(jObj);// {"interest":["A","B","C"]} JSONArray jArray = jObj.getJSONArray("interest");// get()也可以 List<String> rtn = new ArrayList<>(); for (int i = 0; i < jArray.size(); i++) { rtn.add(jArray.getString(i)); } System.out.println(rtn);// [A, B, C] } }
依照客製化型態轉換 (Hibernate3.x 十九)來改
主要改UserType裡面的兩個方法,assemble和disassemble
org.json
/** * JSON轉List */ @Override public Serializable disassemble(Object value) throws HibernateException { JSONObject jObj = new JSONObject(value); JSONArray jArray = jObj.getJSONArray("interest");// get()也可以 List<String> rtn = new ArrayList<>(); for (int i = 0; i < jArray.length(); i++) { rtn.add(jArray.getString(i)); } return (Serializable) rtn; } /** * List轉JSON */ @SuppressWarnings("unchecked") @Override public Object assemble(Serializable cached, Object owner) throws HibernateException { JSONObject jObj = new JSONObject(); jObj.put("interest", ((List<String>) owner)); return jObj; }
net.sf.json
/** * JSON轉List */ @Override public Serializable disassemble(Object value) throws HibernateException { JSONObject jObj = JSONObject.fromObject(value) ; JSONArray jArray = jObj.getJSONArray("interest");// get()也可以 List<String> rtn = new ArrayList<>(); for (int i = 0; i < jArray.size(); i++) { rtn.add(jArray.getString(i)); } return (Serializable) rtn; } /** * List轉JSON */ @SuppressWarnings("unchecked") @Override public Object assemble(Serializable cached, Object owner) throws HibernateException { JSONObject jObj = new JSONObject(); jObj.put("interest", JSONArray.fromObject((List<String>) owner)); return jObj; }
測試類和設定都和客製化型態轉換 (Hibernate3.x 十九)一樣
沒有留言:
張貼留言