2013-01-14 51 views
0

我在Java應用程序和Web應用程序之間有HttpUrlConnection。在Java應用程序我的代碼:如何讓我的HttpUrlConnection以JSON格式返回數據?

exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.getBytes().length); 
exchange.getResponseHeaders().set("content-type", "application/json"); 
exchange.getResponseBody().write(response.getBytes()); 
exchange.close(); 

我認爲錯誤的代碼是在第二行,但我想不出我應該怎麼做。交換類型爲HttpExchange

字符串響應包括:{ batteryMax: 22000, batteryCharge: 860, carRange: 350 }

我用下面的代碼檢索數據:

var jsonData; 
var jqxhr = $.getJSON("http://145.93.73.69:8080/getInfo", function(data) { 
    jsonData = data 
}) 
.error(function() { alert("error"); }); 

error總是被驚動,jsonData撐不定,jqxhr.responseText包含{ batteryMax: 22000, batteryCharge: 860, carRange: 350 }

爲了完成這項工作,我需要做些什麼改變?

+0

檢查控制檯,有什麼錯誤?是'145.93.73.69:8080'您的網站? –

+4

你的字符串響應是無效的JSON。 – fge

+0

您應該使用@Arun Killu描述的鍵和值的引號。 – Archer

回答

0

我找到了解決辦法:

   ObjectMapper mapper = new ObjectMapper(); 
       mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); 
       //JsonNode df = mapper.readValue(response, JsonNode.class); 
       byte[] responseInBytes = mapper.writeValueAsBytes(response); 

我用傑克遜進行從字符串我有(+單引號角落找尋鍵)一個JSON節點有用。

5

JSON必須以這樣的

{ "batteryMax": 22000, "batteryCharge": 860, "carRange": 350 } 
+1

是的,字段名稱必須是JSON字符串,按照RFC 4627的2.2和2.5節。如果不是一個數字,甚至可以引用的價值甚至是 – fge

+0

? –

+0

我正在談論字段名稱(以及準確的成員名稱)。至於成員價值,如果它們是字符串,那麼它們必須是字符串,是的。在這裏,值是JSON數字,因此不能被引用。 '22000'是一個JSON數字,''22000「'是一個JSON字符串。 – fge