将org.json.JSONObject转换为javax.sql.rowset.serial.SerialBlob的最佳方法是什么?

时间:2016-02-17 18:15:15

标签: java blob jsonobject

目前我使用以下方法,但我不喜欢它:

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);

有更好的方法吗?

2 个答案:

答案 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();