目前我使用以下方法,但我不喜欢它:
JSONObject formJsonObj = new JSONObject();
formJsonObj.put("whatever", "whatever is inside");
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(formJsonObj );
byte[] byteArray = b.toByteArray();
SerialBlob blob = new SerialBlob(byteArray);
有更好的方法吗?
答案 0 :(得分:2)
您可能不喜欢您的方法的主要原因是JSONObject不可序列化并且writeObject(formJsonObj)抛出异常。 Java的ObjectOutputStream要求它序列化的对象实现Serializable。
我建议使用JSONObject的toString方法,因为它将以最小化的形式返回基于文本的json表示。一个简单的实现看起来像这样。
public static SerialBlob JSONToBlob(JSONObject object) throws SQLException {
String text = object.toString();
text = text == null ? "{}" : text;
return new SerialBlob(text.getBytes());
}
public static JSONObject blobToJSON(SerialBlob blob) throws SerialException, IOException, JSONException {
InputStream result = blob.getBinaryStream();
String jsonString = new String(toByteArray(result));
return new JSONObject(jsonString);
}
private static byte[] toByteArray(InputStream result) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int i;
while(( i = result.read())== -1) {
out.write(i);
}
return out.toByteArray();
}
答案 1 :(得分:0)
你可以使用Json创建一个编写器并最终将编写器中的字符串转换为byteArray
JSONObject myJson = new JSONObject();
myJson.put("key", "value");
Writer writer = new StringWriter();
Json.createWriter(writer).write(myjson);
SerialBlob blob = new SerialBlob(writer.toString().getBytes());
从SerialBlob到String
JsonReader reader=Json.createReader(serialBlob.getBinaryStream());
JsonObject myJson=reader.readObject();