user1351513
user1351513

Reputation: 43

How can I serialize a Java object to a escaped JSON string?

Is there a way to convert a Java object to a string like below? Note that all the filed names should be escaped, and "\n" is used as to separate records.

{

"content":"{\"field1\":123, \"field2\":1, \"field3\":0, \"field4\":{\"sub1\":\"abc\", \"sub2\":\"xyz\"}}\n
{\"field1\":234, \"field2\":9, \"field3\":1, \"field4\":{\"sub1\":\"xyz\", \"sub2\":\"abc\"}}"

}

Thanks,

Upvotes: 1

Views: 1443

Answers (2)

george_h
george_h

Reputation: 1592

Another alternative is to use the Json-lib library http://json-lib.sourceforge.net

String jsonStrData = " ....... ";
JSONObject jsonObj = JSONObject.fromObject(jsonStrData);
System.out.println(jsonObj);

Like GSON, json-lib handles escaping for you, more info on how to use it here http://json-lib.sourceforge.net/usage.html

Upvotes: 0

Sirko
Sirko

Reputation: 74076

You can use GSON for that task.

Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.

If you need to have a better readable representation, you may use the pretty-print feature.

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

To realize something like your example, you could in a first step serialize your content class, put the resulting string as a property in another class and serialize that one again.

That way GSON takes care of the escaping of ".

If you collect your strings in an array and use the pretty print option shown above, you get something similar to your line-break requirement, but not quite the exact same.

The result of the process described above may look like the following:

{
  "content": [ 
    "{\"field1\":123, \"field2\":1, \"field3\":0, \"field4\":{\"sub1\":\"abc\", \"sub2\":\"xyz\"}}",
    "{\"field1\":234, \"field2\":9, \"field3\":1, \"field4\":{\"sub1\":\"xyz\", \"sub2\":\"abc\"}}"
  ]
}

Upvotes: 2

Related Questions