2012-12-04 68 views
-5

我正在從PHP發送JSON字符串到Java,它由一些字符串類型數據和編碼圖像組成。在jJva中,inputStream被轉換爲BufferedReader並轉換爲String。現在字符串看起來像{"name": "xxx", "image":agrewfefe...} 是否有任何可能的方式來解碼錶示圖像到位圖的字符串或我必須在其他流發送圖像?從JAVA中的JSON字符串獲取圖像

+1

你不能安全地假設,如果你翻譯的圖像文本將不包含在JSON視爲無效(或打破JSON語法,喜歡「或」或字符:或,) – 11684

+1

你的(sorta)snippit對於一個人來說是無效的JSON(字符串必須被引用)除此之外,@ 11684在上面說過;你需要做一些事情,比如Base64編碼你的圖像以避免破壞JSON。 –

+0

你可以_decode_ Base64?@BrianRoach – 11684

回答

1

是;你需要Base64 encode你的形象。

因爲它不能保證您生成的字符是可打印的,或者它們不會破壞JSON格式。

有許多Base64編碼/解碼庫。常用的一種是包含在Apache commons (codec) library

下面是http://www.kodejava.org/examples/375.html

import org.apache.commons.codec.binary.Base64; 
import java.util.Arrays; 

public class Base64Encode { 
    public static void main(String[] args) { 
     String hello = "Hello World"; 

     // 
     // The encodeBase64 method take a byte[] as the paramater. The byte[] 
     // can be from a simple string like in this example or it can be from 
     // an image file data. 
     // 
     byte[] encoded = Base64.encodeBase64(hello.getBytes()); 

     // 
     // Print the encoded byte array 
     // 
     System.out.println(Arrays.toString(encoded)); 

     // 
     // Print the encoded string 
     // 
     String encodedString = new String(encoded); 
     System.out.println(hello + " = " + encodedString); 
    } 
} 

在發送側,你會使用編碼字符串爲您JSON「圖像」字段一個簡​​單的使用例子。另一方面,您將解析JSON,然後將Base64字符串解碼回圖像。

編輯補充:剛剛重新閱讀您的問題(我只記下的標籤最初,錯過了PHP的一部分) - 在PHP端你需要使用base64_encode

http://php.net/manual/en/function.base64-encode.php

1

如前所述,Base64編碼是最好的選擇。但是,不要手動做到這一點,只需使用Jackson JSON library,它自動Base64編碼/解碼二進制數據(任何聲明爲byte[])。因此,像

public class Request { 
    public String name; 
    public byte[] image; 
} 

Request req = new ObjectMapper().readValue(new URL("http://my.service.com/getImage?id=123"), 
    Request.class); 
+0

良好的通話。我其實並不知道傑克遜有這個功能,每天學些新東西。 –