Reverse ToStringBuilder: Convert String to Object

Is there a way to convert my output from ToStringBuilder back to a java object?

I am looking for an easy way to represent a Java object in a readable text file and the ability to convert back and forth between a string and an object.

Thank,

+5
source share
5 answers

You must define a strict format and follow it with a parser. There are two accepted formats:

If you do not select these formats, you will have to handle the parsing yourself.

ToStringBuilder, , . , - .

+2

, , .

, Apache BeanUtils, .

, :

Person@7f54[name=Stephen,age=29,smoker=false]

, . BeanUtils Person:

String className = "Person";
Class beanClass = Class.forName(className);
Person myPerson = (Person)beanClass.newInstance();
BeanUtils.setProperty(myPerson, "name", "Stephen");
BeanUtils.setProperty(myPerson, "age", "29");
BeanUtils.setProperty(myPerson, "smoker", "false");

, Person bean getters/setters.

+1

, , , String . json XML, , , . , POJO. - apache commons.

toString:

@Override
public String toString() {
    return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}

:

public class FromStringBuilder {

/**
 * Parses a string formatted with toStringBuilder
 * 
 * @param input - ex. "Path[id=1039916,displayName=School Home,description=<null>,...]"
 * @return hashmap of name value pairs - ex. id=1039916,... 
 */
public static Map<String, String> stringToMap(String input) {
    LinkedHashMap<String, String> ret = new LinkedHashMap<String, String>();
    String partsString = StringUtils.substringBetween(input, "[", "]");
    String[] parts = partsString.split(",");
    for (String part:parts) {
        String[] nv = part.split("=");
        if (!StringUtils.equals("<null>", nv[1])) {
            ret.put(nv[0], nv[1]);
        }
    }
    return ret;
}

public static <T> T stringToObject(String input, Class<T> clazz) throws IllegalAccessException, InvocationTargetException, InstantiationException {
    Map<String, String> map = stringToMap(input);
    T ret = clazz.newInstance();
    BeanUtils.copyProperties(ret, map);
    return ret;
}
}
+1
0

Gson:

public class GsonTest {
    static class Name { String first; String last; }
    static class Data { int number; Name name = new Name(); }

    public static void main(String[] args) {
        Gson gson = new Gson();

        Data data1 = new Data();
        data1.number = 1;
        data1.name.first = "Joe";
        data1.name.last = "Smith";
        print("data1", data1);

        String jsonString = gson.toJson(data1);
        System.out.println("jsonString: " + jsonString);

        Data data2 = gson.fromJson(jsonString, Data.class);
        print("data2", data2);
    }

    private static void print(String id, Data data) {
        System.out.println(id + "     :" 
                + " number=" + data.number 
                + " name.first=" + data.name.first
                + " name.last=" + data.name.last);
    }
}

data1     : number=1 name.first=Joe name.last=Smith
jsonString: {"number":1,"name":{"first":"Joe","last":"Smith"}}
data2     : number=1 name.first=Joe name.last=Smith

Speed ​​

Gson , Object ↔ Text , .

Bean

XStream () java.beans.XMLEncoder/XMLEncoder, Gson setter getter. , , Java (ObjectOutputStream ..). Gson JavaBeans, Gson .

JSON

GSON JSON . JSON, . , Gson :

Gson gson = new GsonBuilder().setPrettyPrinting().create();

JSON ( ) :

{
  "number": 1,
  "name": {
    "first": "Joe",
    "last": "Smith"
  }
}

{"number":1,"name":{"first":"Joe","last":"Smith"}}
0

All Articles