2015-01-15 1 views
1

Я использую следующий код чтения содержимого с сервераКак конвертировать VCard в JSON массив

URL url = new URL("http://dev.dublabs.com:8080/mobileCampus/json/emergencyContacts"); 
    HttpURLConnection httpcon = (HttpURLConnection)url.openConnection(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(httpcon.getInputStream())); 
    String inputLine; 
    while((inputLine=in.readLine())!=null){ 
     System.out.println(inputLine); 
    } 

Ниже приводится ответ от сервера:

BEGIN:VCARD 
VERSION:2.1 
FN:Campus Police 
N:Campus Police 
TEL:555-EDU-HELP 
ADR:8230 Boone Blvd.;Bldg 001;;Vienna;VA;22181; 
X-MS-OL-DEFAULT-POSTAL-ADDRESS:01155 
EMAIL:[email protected] 
REV:20120501T180000Z 
END:VCARD 
BEGIN:VCARD 
VERSION:2.1 
FN:Campus Medical Clinic 
N:Campus Medical Clinic 
TEL:555-EDU-HURT 
ADR:8230 Boone Blvd.;Bldg 001;;Vienna;VA;22181; 
X-MS-OL-DEFAULT-POSTAL-ADDRESS:01155 
EMAIL:[email protected] 
REV:20120501T180000Z 
END:VCARD 

Есть ли способ, чтобы преобразовать, что в JSON массив?

+0

Данные не JSON, хотя это «похоже». Это может быть «стандартный» формат, для которого есть конвертер. Если нет, вам нужно написать фактический код для его анализа и создания списка карт. –

ответ

0

Хорошо, вот это ...

Используя эту библиотеку, должны решить вашу проблему: https://code.google.com/p/ez-vcard/

--- подход с помощью InputStreamReader (более точно: Хрестоматия)

VCard vcard = Ezvcard.parse(reader).first(); 

(где читатель имеет тип «Reader», который InputStreamReader есть)

и экспортировать его в JSON со следующим фрагментом:

String json = Ezvcard.writeJson(vcard).go(); 
+0

спасибо за решение, это было так просто и сработало за один раз. – Amol

+0

Между тем, я пробовал разбор вручную с этим кодом. 'StringBuilder sb = new StringBuilder(); \t BufferedReader in = new BufferedReader (reader); \t Строка inputLine; \t sb.append ("{JSON ARRAY: ["); \t while ((inputLine = in.readLine())! = Null) { \t \t if (inputLine.equalsIgnoreCase ("BEGIN: VCARD")) {sb.append ("{"); } \t \t, если (inputLine.contains (";")) { \t \t \t inputLine = inputLine.replace (";", "-"); \t \t} \t \t sb.append (inputLine + ";"); \t \t, если (inputLine.equalsIgnoreCase ("КОНЕЦ: VCARD")) { \t \t \t sb.append ("},"); \t \t} \t \t sb.append ("]}"); \t \t JSONObject json = new JSONObject (sb.toString()); \t \t System.out.println (json); ' – Amol

+0

Я бы посоветовал вам использовать эту библиотеку, потому что ваш фрагмент не будет работать (я вложил его в IntelliJ, а while-loop не покрывает весь BufferedReader (но я думаю, что это из-за Copy'n «Pase), и я не знаю специфики vCard, но при разборе вещей всегда есть некоторые камни преткновения на вашем пути, где вам нужно абсолютно знать специфику формата, и вам всегда повезло иметь библиотеку, которая имеет дело с этим. .. –

Смежные вопросы