2016-02-21 7 views
3

Привет Я использую Client Http (apache) и json-simple.Разбор JSON из HTTP-ответа в Java

Я хочу получить доступ к атрибутам ответа json, а затем использовать их.

Любая идея, как это сделать? Я прочитал сообщение и не работал, как я, кроме меня.

Это мой ответ JSON:

{"Name":"myname","Lastname":"mylastname","Age":19} 

Это мой код Java:

DefaultHttpClient httpClient = new DefaultHttpClient(); 

HttpGet getRequest = new HttpGet(
    "http://localhost:8000/responsejava"); 
getRequest.addHeader("accept", "application/json"); 

HttpResponse response = httpClient.execute(getRequest); 

if (response.getStatusLine().getStatusCode() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " 
      + response.getStatusLine().getStatusCode()); 
} 

BufferedReader br = new BufferedReader(
    new InputStreamReader( 
     (response.getEntity().getContent()) 
    ) 
); 

StringBuilder content = new StringBuilder(); 
String line; 
while (null != (line = br.readLine())) { 
    content.append(line); 
} 

Object obj=JSONValue.parse(content.toString()); 
JSONObject finalResult=(JSONObject)obj; 
System.out.println(finalResult); 

httpClient.getConnectionManager().shutdown(); 

Я напечатал пустой, Что я делаю неправильно?

+0

Лучший подход, чтобы сделать это, используя библиотеку Gson, посмотрите на это https://github.com/google/ gson –

ответ

3

Лучше и проще в использовании Gson

Gson gson = new Gson; 
NameBean name = gson.fromJson(content.toString(),NameBean.class) 

NameBean является объектом, где сохраняются строку JSON.

public class NameBean implements Serializable{ 
public String name; 
public String lastname; 
public Int age; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

public Int getAge() { 
    return age; 
} 

public void setAge(Int age) { 
    this.age = age; 
} 

}

+0

Как я определяю имя Bean?; ( –

+1

'NameBean' должен определять с помощью полей и настроек сеттера getter с помощью строки json. Проверьте пользователя gson gui de для более, это легко и не займет много минут – armysheng

2

вместо

Object obj=JSONValue.parse(content.toString()); 
JSONObject finalResult=(JSONObject)obj; 
System.out.println(finalResult); 

попробовать это:

JSONObject jsonObject = new JSONObject(content.toString()); 
System.out.println(jsonObject.getString("Name") + " " jsonObject.getString("Lastname") + " " + jsonObject.getInt("Age")); 
+0

JSONObject не принимает строковый аргумент. Метод getString не существует. Спасибо за ваше время; ( –

+0

Я думаю, что вы используете родную библиотеку, потому что я использовал внешний json jar и работал отлично, надеюсь, вы сможете решить вашу проблему ^^ –

+0

Спасибо. Очевидно, вы используете json javax. не то же самое, что и Gson, или single-json. И может решить мою проблему. –

0

Я высокоочищенного рекомендую http-request построен на Apache HTTP API.

HttpRequest<Data> httpRequest = HttpRequestBuilder.createGet(yourUri, Data.class) 
    .addDefaultHeader("accept", "application/json") 
    .build(); 

public void send(){ 
    ResponseHandler<Data> responseHandler = httpRequest.execute(); 
    Data data = responseHandler.orElseThrow(); // returns the data or throws ResponseException If response code is not success 
} 

Data класс, который вы получаете как ответ.

public Data{ 
    private String Name; 
    private String Lastname; 
    private int Age; 

    // getters and setters 
} 

Я также рекомендую смотреть мой ответ here Если вы хотите получить ответ в виде строки

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