2016-08-11 3 views
0

У меня есть bufferedReader, который принимает ответ от WebAPI для запроса httpPost.Java: BufferedReader и ответ WebAPI

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/json"); 

/* send http-POST request to webAPI */ 
OutputStream os = conn.getOutputStream(); 
os.write(input.getBytes()); 
os.flush(); 


BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

Данные, содержащиеся в «ш» в результате запроса HttpPost сделанного в WebAPI: -

{ 
    "xx" : "...." 
    "yy" : "...." 
    "zz" : "...." 
} 
HTTP/1.1 202... blah blah blah 
Content-Length: 35 
X-Frame-Options: deny 
X-XSS-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Connection: close 

Прежде всего я хотел бы отметить, что это странно, что я получение информации заголовка в самом ответе ... но только для JAVA .. (я кодирую то же самое с C#, где я наиболее опытен и не получил никакой информации заголовка). Возможно ли это? так как ... в моем понимании, что ответ webapi не зависит от кода C# или Java?

Теперь моя главная цель - извлечь значение для ключа 'zz'.

Я пытался что-то вроде: -

JSONParser parser = new JSONParser(); 
    try 
    { 
    JSONObject json = (JSONObject) parser.parse(br); 
    } 
    catch (org.json.simple.parser.ParseException e) 
    { 
    e.printStackTrace(); 
    } 

Однако из-за странного HTTP/202 ответа часть сообщения, я получаю сообщение об ошибке «Неожиданный символ (H) в позиции 281».

Итак, я думаю, может быть, мне нужно усечь мой буфер «br», прежде чем пытаться использовать JSON. Мне интересно, что это лучший способ сделать это?

+0

вы получаете эту ошибку, потому что строка, что вы разбираете не является действительным 'JSON' –

+0

Я понимаю, что Рамана. Однако в моем следующем утверждении я упоминаю, как я пытаюсь выяснить, как обрезать эту строку, чтобы я мог ее разобрать как json. – Philo

+1

ya, как вы сказали в вопросе, вы также можете усечь его. Но почему вы делаете это сложным. Почему бы не использовать что-то простое, как обычные выражения? См. Эту ссылку https://regex101.com/r/gN4oJ8/2. См. Столбец информации о матчах на RHS –

ответ

0

Делать это через json сделает его более сложным, потому что вы должны сначала преобразовать его в надлежащее json для того, чтобы позволить json анализатор для анализа.

Более оптимальный способ сделать это будет через регулярные выражения

Входной

{ 
    xx : 
    yy : 
    zz : sample 123123 
} 
HTTP/1.1 202... blah blah blah 
Content-Length: 35 
X-Frame-Options: deny 
X-XSS-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Connection: close 

Regular Expression

.*zz\s*:\s*(.*)[\n\r]/g 

Выход

sample 123123 

См this link для более подробной информации

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