我嘗試將應用程序連接到提供我要麼喜歡獲取或者anarray列表或類
[{"descr":"my description","id":"123"},...]
或在錯誤的東西像
{"error":{"code":123,"message":"my message"}}
是案件的陣列外部服務有一種方法可以將其定義爲單個類,或者通過哪個對象來識別流?
更新1:我已經測試了幾個版本,通過在循環中計算100次並計算平均執行時間。在所有不同的版本中,我使用過傑克遜。
這一個是性能的基準。它不符合業務需求,因爲代碼不區分數組和對象。
fcPhotos = mJsonToObjectMapper.readValue(mFcHttpHelper.doGet(urlString), FcPhotos.class);
照片:使用平均值100執行。持續時間:923ms
使用解析器會使性能降低大約最小。 50%
JsonParser jsonParser = mJsonFactory.createJsonParser(mFcHttpHelper.doGet(urlString));
if (jsonParser.nextToken() == JsonToken.START_ARRAY) {
fcPhotos = mJsonToObjectMapper.readValue(jsonParser, FcPhotos.class);
}
照片:使用平均值100執行。持續時間:1585ms
轉換InputStream的成String,並保持objectMapper.readValue溶液中通入:
jsonString = inputStreamToString(urlString);
fcPhotos = mJsonToObjectMapper.readValue(jsonString, FcPhotos.class);
private final String inputStreamToString(final String urlString) throws UnsupportedEncodingException, IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(mFcHttpHelper.doGet(urlString), "UTF8"), 8192);
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
bufferedReader.close();
return stringBuilder.toString();
}
照片:100個執行與魅力。持續時間:更新的1191ms
端1
Thx StaxMan。奇蹟般有效。代碼現在看起來像:\t \t \t JsonFactory f = new JsonFactory(); \t \t \t JsonParser jp = f.createJsonParser(photosInput); \t \t \t \t \t \t \t最終JsonToken的nextToken = jp.nextToken(); \t \t \t if(nextToken == JsonToken。START_ARRAY){ \t \t \t \t anArray = mJsonToObjectMapper.readValue(jp,AnArray.class); 元件「); \t \t \t}否則如果(的nextToken == JsonToken.START_OBJECT){ \t \t \t \t anError = mJsonToObjectMapper.readValue(JP,AnError.class); \t \t \t \t Log.w(TAG, 「出現錯誤」 + error.code + 「:」 +返回Error.message); \t \t \t}否則{ \t \t \t \t Log.w(TAG 「UNKNOW結果」); \t \t \t} – lichtzeichenanlage 2011-02-10 10:31:03