概述
任意对象转换成JSON
只支持字符和基本类型
代码
package ztf.question3;
public class Address {
private String province;
private String street;
public Address() {
}
public Address(String pro,String street){
this.province=pro;
this.street=street;
}
public String getProvince(){
return this.province;
}
public void setProvince(String province){
this.province=province;
}
public String getStreet(){
return this.street;
}
public void setStreet(String street){
this.street=street;
}
@Override
public String toString() {
return "Address [province=" + province + ", street=" + street + "]";
}
}
package ztf.question3;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
public class Application {
public static void main(String[] args){
Person person=new Person();
person.setName("ddd");
person.setAge(23);
Address address=new Address("chonqqing","Hong Guang Street");
person.setAddress(address);
System.out.println(ObjectToJson.writeJson(person.getClass(), person));
}
}
package ztf.question3;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ObjectToJson {
public static String writeJson(Class clazz,Object obj){
StringBuilder stringBuilder=new StringBuilder();
try{
stringBuilder.append("{");
Field[] declaredFields = clazz.getDeclaredFields();
for(Field field:declaredFields) {
field.setAccessible(true);
stringBuilder.append("""+field.getName()+"":");
Class<?> type = field.getType();
if(type.isPrimitive()||type==String.class) {
Method m = (Method) clazz.getMethod(
"get" + getMethodName(field.getName()));
stringBuilder.append("""+m.invoke(obj)+""");
}else {
Method m = (Method) clazz.getMethod(
"get" + type.getSimpleName());
stringBuilder.append(writeJson(field.getType(),m.invoke(obj)));
}
stringBuilder.append(",");
}
return reChange(stringBuilder.toString());
}catch(Exception e){
e.printStackTrace();
}
return null;
}
private static String reChange(String string) {
// TODO Auto-generated method stub
return string.substring(0,string.length()-1)+"}";
}
private static String getMethodName(String name) {
// TODO Auto-generated method stub
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
}
package ztf.question3;
public class Person {
private String name;
private int age;
private Address address;
public Person(){
this.name="";
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age=age;
}
public Address getAddress(){
return this.address;
}
public void setAddress(Address address){
this.address=address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
json转换成指定对象
需要修改代码才能支持其他类型
代码
package ztf.question4;
import ztf.question3.Person;
public class Application {
public static void main(String[] args){
String json=new String("{"name":"ddd","age":"23","address":{"province":"chonqqing","street":"Hong Guang Street"}}rn" +
"");
System.out.println((Person)JsonToPerson.readJson(json,Person.class));
}
}
package ztf.question4;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import net.sf.json.JSONObject;
import ztf.question3.Address;
public class JsonToPerson {
public static Object readJson(String json,Class class1) {
JSONObject jsoj = JSONObject.fromObject(json);
try {
Object obj=class1.newInstance();
Field[] fields = class1.getDeclaredFields();
for(Field field:fields) {
Class<?> type = field.getType();
Method method = class1.getMethod("set"+getMethodName(field.getName()),type);
if(type.isPrimitive()||"java.lang.String".equals(type.getName())) {
//这里应该有更好的解决方法,需要查看其他框架的源码
if("java.lang.String".equals(type.getName())) {
method.invoke(obj, jsoj.get(field.getName()));
}else if("int".equals(type.getName())){
method.invoke(obj, Integer.valueOf(jsoj.get(field.getName()).toString()));
}
}else {
method.invoke(obj, (Address)readJson(jsoj.get(field.getName()).toString(),type));
}
}
return obj;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static String fixEleName(String name) {
int lastIndexOf = name.lastIndexOf('.');
if(lastIndexOf<=-1)
return name;
return name.substring(lastIndexOf+1, lastIndexOf+2).toLowerCase()+name.substring(lastIndexOf+2);
}
private static String getMethodName(String name) {
// TODO Auto-generated method stub
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
}
最后
以上就是彩色猎豹为你收集整理的JAVA-任意对象转换成JSON,json转换成指定对象的全部内容,希望文章能够帮你解决JAVA-任意对象转换成JSON,json转换成指定对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复