38

UDP プロトコルでバイト形式を使用してデータを送信するときに問題が発生します。問題は、タイプ json オブジェクトでデータを作成しようとすると、データのバイト形式を取得できないことです。これは私のサンプル コードです。

    JSONObject obj = new JSONObject();
    obj.put("name", "foo");
    obj.put("num", new Integer(100));
    obj.put("balance", new Double(1000.21));
    obj.put("is_vip", new Boolean(true));
    obj.put("nickname",null);

    sendData = obj.getBytes(); //this is error because not have methos getBytes();

私は自分の問題を知っていますが、json オブジェクトをバイトに変換する方法が見つかりません。何か提案はありますか?

4

4 に答える 4

48

文字列のバイトを取得します。

obj.toString().getBytes(theCharset);
于 2012-04-11T04:29:02.307 に答える
33

あなたが言及するJSONObjectがこれからのものであると仮定すると、以下のようなバイトを取得できます

sendData = obj.toString().getBytes("utf-8");
于 2012-04-11T04:31:14.870 に答える
3

提供されたcharsetに基づいてエンコーディングを強制するからStringへの不要な変換を避けるために、たとえばwith を直接使用することを好みます ( subtypes use with ):byte[]JsonWriterByteArrayOutputStreamJsonValueJsonWriterStringWriter

ByteArrayOutputStream stream = new ByteArrayOutputStream();
Json.createWriter(stream).write(obj);

byte[] sendData = stream.toByteArray()

System.out.println("Bytes array: " + sendData);
System.out.println("As a string: " + stream.toString());

さらに、次のようにきれいな印刷を有効にすることもできます。

Json.createWriterFactory(
            Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true))
        .createWriter(stream)
        .write(obj);

唯一の悲しいことは、それがワンライナーではないということです。少なくとも3つ必要です(JsonWriter.close()このコンテキストでは不要な呼び出しを省略したという事実を考えると)。

于 2016-09-09T12:59:22.527 に答える