【问题标题】:What is the Best way to convert org.json.JSONObject to javax.sql.rowset.serial.SerialBlob?将 org.json.JSONObject 转换为 javax.sql.rowset.serial.SerialBlob 的最佳方法是什么?
【发布时间】:2016-05-29 14:52:06
【问题描述】:

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

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

有没有更好的办法?

【问题讨论】:

  • 肯定有比对 JSON 对象应用 Java 序列化更好的方法

标签: java blob jsonobject


【解决方案1】:

您可能不喜欢您的方法的主要原因是 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();
}

【讨论】:

    【解决方案2】:

    你可以使用 Json 创建一个 writer 并最终将 writer 中的字符串转换为 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 到字符串

    JsonReader reader=Json.createReader(serialBlob.getBinaryStream());
    JsonObject myJson=reader.readObject();
    

    【讨论】:

    • 这不起作用。 write 方法不接受 org.json.JSONObject。
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多