library java android json unirest mashape

java - library - Cómo analizar los resultados JSON de la llamada Unirest



rest client java library (7)

Estoy usando la biblioteca Unirest para recuperar JSON de una API de Mashape. Tengo la llamada trabajando usando el siguiente código:

HttpResponse<JsonNode> request = Unirest.get(URL) .header("X-Mashape-Authorization", MASHAPE_AUTH) .asJson();

Esto devuelve mi JSON en forma de HttpResponse<JsonNode> , con el que no estoy familiarizado.

Al leer la documentación limitada, parece que tengo que llamar a getBody() en el objeto de respuesta para poder recuperar un objeto JsonNode. Todavía no tengo idea de qué hacer con el objeto JsonNode sin embargo.

¿Cuál es la mejor manera de comenzar a analizar estos datos?

Edición: en caso de que ayude a dar ejemplos, el JSON que quiero analizar se ve así:

{ "success": "1", "error_number": "", "error_message": "", "results": [ { "name": "name1", "formatedName": "Name 1" }, { "name": "testtesttest", "formatedName": "Test Test Test" }, { "name": "nametest2", "formatedName": "Name Test 2" }, { "name": "nametest3", "formatedName": "Name Test 3" } ] }


Como la respuesta se recupera fácilmente como una cadena, puede usar cualquier biblioteca JSON que desee para deserialzion si no desea recorrer el JSON manualmente. Personalmente, soy parcial con el GSON de Google y su capacidad para asignar fácilmente su respuesta JSON a un objeto que usted crea para que coincida.

HttpRequest request = Unirest.get(/*your request URI*/) .headers(/*if needed*/) .queryString(/*if needed*/); HttpResponse<JsonNode> jsonResponse = request.asJson(); Gson gson = new Gson(); String responseJSONString = jsonResponse.getBody().toString(); MyResponseObject myObject = gson.fromJson(responseJSONString, String.class);


En una cadena JSON, hay dos símbolos que lo guían a través del análisis:

{- indica un objeto JSON

[- indica un JSONArray

Al analizar una cadena json, debe revisar estos elementos de forma iterativa. Para comprender la cantidad de JsonObjects y JsonArrays que tiene en su cadena, y desde la cual debe comenzar a analizar, use una herramienta json-visualizer como este sitio web . Para el ejemplo de la cadena, la estructura es así:

Como puede ver, el objeto raíz es un objeto JSONO que consiste en un JSONArray con tres jsonOnjects. Para analizar dicha estructura puedes usar:

JSONObject jsonobj = new JSONObject(jsonstring); String result = jsonObject.getString("success"); String error_number = jsonObject.getString("error_number"); String error_message = jsonObject.getString("error_message"); JSON Array jsonarray = jsonobj.getJSONArray(); String[] names = new String[jsonArray.length()]; String[] formattedNames = new String[jsonArray.length()]; for(int i=0;i<jsonArray.length();i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); names [i] = jsonObject.getString("name"); formattedNames [i] = jsonObject.getString("formattedName"); }


Estaba tratando de resolver esto hoy por mí mismo. El código fuente es probablemente la única documentación que obtendrá. Aquí está el tl; dr

// the request from your question HttpResponse<JsonNode> request = Unirest.get(URL) .header("X-Mashape-Authorization", MASHAPE_AUTH) .asJson(); // retrieve the parsed JSONObject from the response JSONObject myObj = request.getBody().getObject(); // extract fields from the object String msg = myObj.getString("error_message"); JSONArray results = myObj.getJSONArray();

Aquí hay una explicación más del spelunking que hice:

Desde la clase HttpResponse podemos ver que getBody() devolverá el body variable de instancia, que se asigna en la línea 92 como:

this.body = (T) new JsonNode(jsonString)

Entonces tenemos que mirar la clase JsonNode . El constructor toma una cadena que representa el JSON que se va a analizar e intenta crear un JSONObject o un JSONArray . Esos objetos provienen de org.json que está bien documentado , por suerte.


Esto debería funcionar como funcionó para mí.

System.out.println(request.getBody().getObject().toString(2));

Código de muestra

import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.JsonNode; import com.mashape.unirest.http.Unirest; public class UnirestClient{ public void getQuestions() throws Exception { HttpResponse<JsonNode> stack= Unirest.get("https://api.stackexchange.com/2.2/questions"). header("accept", "application/json"). queryString("order","desc"). queryString("sort", "creation"). queryString("filter", "default"). queryString("site", ""). asJson(); System.out.println(stack.getBody().getObject().toString(2)); } public static void main(String args[]) throws Exception { JavaHTTPAPIClient client = new JavaHTTPAPIClient(); client.getQuestionsUsingUnirest(); } }

Respuesta

{ "quota_max": 300, "items": [ { "creation_date": 1477998742, "tags": [ "javascript", "spring", "sockjs", "spring-js", "sockjs-tornado" ], "title": "Sockjs 404 not found", "link": "http://.com/questions/40358911/sockjs-404-not-found", "score": 0, "answer_count": 0, "owner": { "display_name": "Sviatlana", "accept_rate": 71, "user_type": "registered", "profile_image": "https://i.stack.imgur.com/J9utH.jpg?s=128&g=1", "link": "http://.com/users/5288347/sviatlana", "reputation": 109, "user_id": 5288347 }, "last_activity_date": 1477998742, "question_id": 40358911, "view_count": 2, "is_answered": false }, { "creation_date": 1477998741, "tags": [ "php", "html", "email", "magento", "static-block" ], "title": "Creating a magento email template: custom static block not working", "link": "http://.com/questions/40358910/creating-a-magento-email-template-custom-static-block-not-working", "score": 0, "answer_count": 0, "owner": { "display_name": "Elliot", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/3ca06bfc99ca77598a8c58aa0945bc8a?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/6914645/elliot", "reputation": 3, "user_id": 6914645 }, "last_activity_date": 1477998741, "question_id": 40358910, "view_count": 1, "is_answered": false }, { "creation_date": 1477998733, "tags": [ "vba", "random", "macros", "numbers", "powerpoint" ], "title": "Random number Powerpoint as slide change", "link": "http://.com/questions/40358908/random-number-powerpoint-as-slide-change", "score": 0, "answer_count": 0, "owner": { "display_name": "Luca ", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/50594e4723d9c9235a49385e70fdc347?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/7099333/luca", "reputation": 1, "user_id": 7099333 }, "last_activity_date": 1477998733, "question_id": 40358908, "view_count": 2, "is_answered": false }, { "creation_date": 1477998717, "tags": [ "javascript", "jquery", "cordova", "jquery-mobile" ], "title": "page redirection happening when Go button is pressed on a textbox (jquery/cordova)", "link": "http://.com/questions/40358903/page-redirection-happening-when-go-button-is-pressed-on-a-textbox-jquery-cordov", "score": 0, "answer_count": 0, "owner": { "display_name": "Abhi", "accept_rate": 58, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/118f3b090dbf70bbb82dd280ed2f4e24?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/5145530/abhi", "reputation": 536, "user_id": 5145530 }, "last_activity_date": 1477998717, "question_id": 40358903, "view_count": 3, "is_answered": false }, { "creation_date": 1477998684, "tags": [ "php", "wordpress", "for-loop" ], "title": "Wordpress: looping through alternating post types and outputting featured image", "link": "http://.com/questions/40358895/wordpress-looping-through-alternating-post-types-and-outputting-featured-image", "score": 0, "answer_count": 0, "owner": { "display_name": "icabob91", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/4955d4f2e9bcbdee92ef49ffd76c51d6?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/6104799/icabob91", "reputation": 3, "user_id": 6104799 }, "last_activity_date": 1477998684, "question_id": 40358895, "view_count": 3, "is_answered": false }, { "creation_date": 1477998678, "tags": [ "python", "datetime", "python-3.5", "timedelta" ], "title": "datetime difference in python3.5", "link": "http://.com/questions/40358893/datetime-difference-in-python3-5", "score": 0, "answer_count": 0, "owner": { "display_name": "gansub", "accept_rate": 85, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/ac74b6d927012828dbd79279614f3e58?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/4033876/gansub", "reputation": 237, "user_id": 4033876 }, "last_activity_date": 1477998678, "question_id": 40358893, "view_count": 4, "is_answered": false }, { "creation_date": 1477998668, "tags": [ "arm", "tensorflow" ], "title": "Wipe out dropout operations from TensorFlow graph", "link": "http://.com/questions/40358892/wipe-out-dropout-operations-from-tensorflow-graph", "score": 0, "answer_count": 0, "owner": { "display_name": "Dmytro Prylipko", "accept_rate": 40, "user_type": "registered", "profile_image": "https://i.stack.imgur.com/aVfpi.png?s=128&g=1", "link": "http://.com/users/2641587/dmytro-prylipko", "reputation": 98, "user_id": 2641587 }, "last_activity_date": 1477998668, "question_id": 40358892, "view_count": 2, "is_answered": false }, { "creation_date": 1477998668, "tags": [ "c++", "qt" ], "title": "Scale a dynamically added widget", "link": "http://.com/questions/40358891/scale-a-dynamically-added-widget", "score": 0, "answer_count": 0, "owner": { "display_name": "student", "accept_rate": 88, "user_type": "registered", "profile_image": "https://graph.facebook.com/814890818587238/picture?type=large", "link": "http://.com/users/4621626/student", "reputation": 43, "user_id": 4621626 }, "last_activity_date": 1477998668, "question_id": 40358891, "view_count": 3, "is_answered": false }, { "creation_date": 1477998642, "tags": ["sql"], "title": "SQL returning different rows based on certain conditions", "link": "http://.com/questions/40358889/sql-returning-different-rows-based-on-certain-conditions", "score": 0, "answer_count": 0, "owner": { "display_name": "clueless83", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/c99db40aa014047b39b6e8222c120d84?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/6720789/clueless83", "reputation": 18, "user_id": 6720789 }, "last_activity_date": 1477998642, "question_id": 40358889, "view_count": 10, "is_answered": false }, { "creation_date": 1477998626, "tags": [ "angularjs", "select", "multiple-select" ], "title": "Angular: Select multiple in chrome ( in firefox work perfectly)", "link": "http://.com/questions/40358886/angular-select-multiple-in-chrome-in-firefox-work-perfectly", "score": 0, "answer_count": 0, "owner": { "display_name": "Enrique Rubio Sanchez", "user_type": "registered", "profile_image": "https://lh3.googleusercontent.com/-jKUZPfGsMEY/AAAAAAAAAAI/AAAAAAAAAHY/aisyHc_Xlm4/photo.jpg?sz=128", "link": "http://.com/users/5496817/enrique-rubio-sanchez", "reputation": 11, "user_id": 5496817 }, "last_activity_date": 1477998626, "question_id": 40358886, "view_count": 5, "is_answered": false }, { "creation_date": 1477998622, "tags": [ "c#", "coloranimation" ], "title": "Cannot animate the color property because the object is sealed or frozen", "link": "http://.com/questions/40358884/cannot-animate-the-color-property-because-the-object-is-sealed-or-frozen", "score": 0, "answer_count": 0, "owner": { "display_name": "Wobbles", "accept_rate": 63, "user_type": "registered", "profile_image": "https://graph.facebook.com/100003846611758/picture?type=large", "link": "http://.com/users/3797778/wobbles", "reputation": 1691, "user_id": 3797778 }, "last_activity_date": 1477998622, "question_id": 40358884, "view_count": 3, "is_answered": false }, { "creation_date": 1477998619, "tags": [ "paypal", "laravel-5.2", "paypal-rest-sdk" ], "title": "Integrating Paypal Rest API to laravel 5.2 using anouarabdsslm", "link": "http://.com/questions/40358882/integrating-paypal-rest-api-to-laravel-5-2-using-anouarabdsslm", "score": 0, "answer_count": 0, "owner": { "display_name": "Ankit Jindal", "user_type": "registered", "profile_image": "https://graph.facebook.com/100001546390988/picture?type=large", "link": "http://.com/users/4198180/ankit-jindal", "reputation": 6, "user_id": 4198180 }, "last_activity_date": 1477998619, "question_id": 40358882, "view_count": 2, "is_answered": false }, { "creation_date": 1477998605, "tags": [ "decimal", "dynamics-crm-2016", "editablegrid" ], "title": "Dynamcis CRM EditableGrid sdoesn&#39;t sets quantity to 0", "link": "http://.com/questions/40358881/dynamcis-crm-editablegrid-sdoesnt-sets-quantity-to-0", "score": 0, "answer_count": 0, "owner": { "display_name": "ODE", "accept_rate": 71, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/3607bfe0c1a853e890ff5c746e793856?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/3332226/ode", "reputation": 82, "user_id": 3332226 }, "last_activity_date": 1477998605, "question_id": 40358881, "view_count": 2, "is_answered": false }, { "creation_date": 1477998604, "tags": [ "reporting-services", "parameters", "mdx" ], "title": "MDX (SSRS) Parameter subset", "link": "http://.com/questions/40358880/mdx-ssrs-parameter-subset", "score": 0, "answer_count": 0, "owner": { "display_name": "user2181700", "accept_rate": 67, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/a973bbc5607eb4bf001c1d0587c2035d?s=128&d=identicon&r=PG", "link": "http://.com/users/2181700/user2181700", "reputation": 40, "user_id": 2181700 }, "last_activity_date": 1477998604, "question_id": 40358880, "view_count": 2, "is_answered": false }, { "creation_date": 1477998588, "tags": [ "bash", "chef-recipe" ], "title": "How can I loop through bash routine in Chef?", "link": "http://.com/questions/40358877/how-can-i-loop-through-bash-routine-in-chef", "score": 0, "answer_count": 0, "owner": { "display_name": "user5241806", "accept_rate": 38, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/f93135e0156fd5d3ecba4935a42c0c47?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/5241806/user5241806", "reputation": 63, "user_id": 5241806 }, "last_activity_date": 1477998588, "question_id": 40358877, "view_count": 3, "is_answered": false }, { "creation_date": 1477998584, "tags": [ "entity-framework", "asp.net-web-api", "unity-container" ], "title": "Dependency injection not working in web api call", "link": "http://.com/questions/40358875/dependency-injection-not-working-in-web-api-call", "score": 0, "answer_count": 0, "owner": { "display_name": "Tom", "accept_rate": 71, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/71cd701f6826481858ee299f68f3205a?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/4607841/tom", "reputation": 94, "user_id": 4607841 }, "last_activity_date": 1477998584, "question_id": 40358875, "view_count": 5, "is_answered": false }, { "creation_date": 1477998573, "tags": [ "c++", "windows", "process", "kill", "termination" ], "title": "How to prevent a windows application from being killed/terminate or stop", "link": "http://.com/questions/40358872/how-to-prevent-a-windows-application-from-being-killed-terminate-or-stop", "score": 0, "answer_count": 0, "owner": { "display_name": "Ankush Dhingra", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/136386aece9fd21861cb2b42f24f81b6?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/7099310/ankush-dhingra", "reputation": 1, "user_id": 7099310 }, "last_activity_date": 1477998573, "question_id": 40358872, "view_count": 6, "is_answered": false }, { "creation_date": 1477998556, "tags": [ "python", "azure", "arm", "azure-sdk-python" ], "title": "Azure python sdk for VM Resource Monitoring", "link": "http://.com/questions/40358870/azure-python-sdk-for-vm-resource-monitoring", "score": 0, "answer_count": 0, "owner": { "display_name": "KMG", "accept_rate": 26, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/3632d43837fe92fda15ddf3b6ad5a8c2?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/3524468/kmg", "reputation": 158, "user_id": 3524468 }, "last_activity_date": 1477998556, "question_id": 40358870, "view_count": 3, "is_answered": false }, { "creation_date": 1477998521, "tags": [ "javascript", "arrays", "for-loop" ], "title": "JavaScript array 2 dimension for loop", "link": "http://.com/questions/40358865/javascript-array-2-dimension-for-loop", "score": 0, "answer_count": 0, "owner": { "display_name": "Rayan Suryadikara", "accept_rate": 80, "user_type": "registered", "profile_image": "https://graph.facebook.com/959947287411964/picture?type=large", "link": "http://.com/users/5355995/rayan-suryadikara", "reputation": 28, "user_id": 5355995 }, "last_activity_date": 1477998521, "question_id": 40358865, "view_count": 24, "is_answered": false }, { "creation_date": 1477998512, "tags": [ "javascript", "user-interface", "kendo-ui", "grid" ], "title": "How to set the number format for hyperlinks in kendo grid column", "link": "http://.com/questions/40358863/how-to-set-the-number-format-for-hyperlinks-in-kendo-grid-column", "score": 0, "answer_count": 0, "owner": { "display_name": "Harsha vardhan Reddy", "user_type": "registered", "profile_image": "https://lh6.googleusercontent.com/-tnuvSHlig1U/AAAAAAAAAAI/AAAAAAAAAdU/pBo7JDjmBpM/photo.jpg?sz=128", "link": "http://.com/users/6323557/harsha-vardhan-reddy", "reputation": 1, "user_id": 6323557 }, "last_activity_date": 1477998512, "question_id": 40358863, "view_count": 2, "is_answered": false }, { "creation_date": 1477998507, "tags": [ "android", "achartengine" ], "title": "aChartEngine; getCurrentSeriesAndPoint returns null", "link": "http://.com/questions/40358862/achartengine-getcurrentseriesandpoint-returns-null", "score": 0, "answer_count": 0, "owner": { "display_name": "Hyunin", "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/ddaf10ed143d2d44f9a1de00dc6465ec?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/7099269/hyunin", "reputation": 1, "user_id": 7099269 }, "last_activity_date": 1477998507, "question_id": 40358862, "view_count": 2, "is_answered": false }, { "creation_date": 1477998499, "tags": [ "c#", "selenium", "selenium-chromedriver" ], "title": "Uploading a file with Selenium C#", "link": "http://.com/questions/40358860/uploading-a-file-with-selenium-c", "score": 0, "answer_count": 0, "owner": { "display_name": "Hoverlord", "user_type": "registered", "profile_image": "https://lh4.googleusercontent.com/-5spNCjwaRtU/AAAAAAAAAAI/AAAAAAAADUo/CWI4U9m0VWw/photo.jpg?sz=128", "link": "http://.com/users/7099290/hoverlord", "reputation": 1, "user_id": 7099290 }, "last_activity_date": 1477998499, "question_id": 40358860, "view_count": 4, "is_answered": false }, { "creation_date": 1477998487, "tags": [ "javascript", "unit-testing", "angular2", "typescript", "jasmine" ], "title": "Angular 2 with jasmine: test component with injected service", "link": "http://.com/questions/40358858/angular-2-with-jasmine-test-component-with-injected-service", "score": 0, "answer_count": 0, "owner": { "display_name": "DavidL", "accept_rate": 81, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/ce4583fa48bbd2e762ba0a9aaeab7909?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/4656551/davidl", "reputation": 483, "user_id": 4656551 }, "last_activity_date": 1477998487, "question_id": 40358858, "view_count": 5, "is_answered": false }, { "creation_date": 1477998486, "tags": [ "c#", "jquery", "ajax", "routes", "asp.net-core-mvc" ], "title": "asp.net core id value in route doesn&#39;t work with ajax", "link": "http://.com/questions/40358857/asp-net-core-id-value-in-route-doesnt-work-with-ajax", "last_edit_date": 1477998683, "score": 0, "answer_count": 0, "owner": { "display_name": "Anton Toshik", "accept_rate": 86, "user_type": "registered", "profile_image": "https://graph.facebook.com/1259984217361793/picture?type=large", "link": "http://.com/users/5784635/anton-toshik", "reputation": 27, "user_id": 5784635 }, "last_activity_date": 1477998683, "question_id": 40358857, "view_count": 9, "is_answered": false }, { "creation_date": 1477998481, "tags": [ "python", "string", "python-3.x", "machine-learning", "string-matching" ], "title": "how to generate a set of similar strings in python", "link": "http://.com/questions/40358855/how-to-generate-a-set-of-similar-strings-in-python", "score": 0, "answer_count": 0, "owner": { "display_name": "daiyue", "accept_rate": 82, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/55fd0f7d95a4938975026ff886c3a563?s=128&d=identicon&r=PG", "link": "http://.com/users/766708/daiyue", "reputation": 806, "user_id": 766708 }, "last_activity_date": 1477998481, "question_id": 40358855, "view_count": 8, "is_answered": false }, { "creation_date": 1477998477, "tags": [ "java", "mysql", "swing", "connection-pooling" ], "title": "Does Connection Pooling makes Java Swing Application works faster for remote MySQL database", "link": "http://.com/questions/40358852/does-connection-pooling-makes-java-swing-application-works-faster-for-remote-mys", "score": 0, "answer_count": 0, "owner": { "display_name": "user2200561", "accept_rate": 25, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/1b7fb8ee134a1d1fdb25350e74c3322c?s=128&d=identicon&r=PG", "link": "http://.com/users/2200561/user2200561", "reputation": 8, "user_id": 2200561 }, "last_activity_date": 1477998477, "question_id": 40358852, "view_count": 5, "is_answered": false }, { "creation_date": 1477998469, "tags": [ "python", "apache", "hadoop", "mapreduce", "apache-pig" ], "title": "Apache Pig - nested FOREACH over same relation", "link": "http://.com/questions/40358849/apache-pig-nested-foreach-over-same-relation", "score": 0, "answer_count": 0, "owner": { "display_name": "user2817219", "accept_rate": 60, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/89b91c209b145ead1e1a4309fc048afc?s=128&d=identicon&r=PG&f=1", "link": "http://.com/users/2817219/user2817219", "reputation": 65, "user_id": 2817219 }, "last_activity_date": 1477998469, "question_id": 40358849, "view_count": 4, "is_answered": false }, { "creation_date": 1477998456, "tags": [ "mysql", "laravel-5", "eloquent" ], "title": "column overridden by another column with same name when using join method in eloquent", "link": "http://.com/questions/40358846/column-overridden-by-another-column-with-same-name-when-using-join-method-in-elo", "score": 0, "answer_count": 0, "owner": { "display_name": "Mazino S Ukah", "accept_rate": 100, "user_type": "registered", "profile_image": "https://graph.facebook.com/933943226659646/picture?type=large", "link": "http://.com/users/5746074/mazino-s-ukah", "reputation": 125, "user_id": 5746074 }, "last_activity_date": 1477998456, "question_id": 40358846, "view_count": 5, "is_answered": false }, { "creation_date": 1477998428, "tags": [ "javascript", "http", "caching", "browser" ], "title": "Tell the browser to drop cache of image", "link": "http://.com/questions/40358839/tell-the-browser-to-drop-cache-of-image", "score": 0, "answer_count": 0, "owner": { "display_name": "php_nub_qq", "accept_rate": 86, "user_type": "registered", "profile_image": "https://i.stack.imgur.com/daMab.jpg?s=128&g=1", "link": "http://.com/users/2415293/php-nub-qq", "reputation": 5811, "user_id": 2415293 }, "last_activity_date": 1477998428, "question_id": 40358839, "view_count": 8, "is_answered": false }, { "creation_date": 1477998422, "tags": [ "ios", "certificate", "keychain", "p12" ], "title": "Keychain asking password for importing p12 but i didn&#39;t give password", "link": "http://.com/questions/40358836/keychain-asking-password-for-importing-p12-but-i-didnt-give-password", "score": 0, "answer_count": 0, "owner": { "display_name": "Olcay Erta?", "accept_rate": 92, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/f164c6c3b709c97862a0d14f7725830b?s=128&d=identicon&r=PG", "link": "http://.com/users/614065/olcay-erta%c5%9f", "reputation": 1129, "user_id": 614065 }, "last_activity_date": 1477998422, "question_id": 40358836, "view_count": 2, "is_answered": false } ], "has_more": true, "quota_remaining": 298 }


Hay una función de serialización en Unirest (probablemente salió después de las respuestas en 2015 y 2014). Con la versión actual 1.4.9, puede usar los métodos prácticos AsObject (Class) y body (Object). Aquí hay un ejemplo de deserialización de las respuestas de AWS CloudSearch.

import java.util.Arrays; import org.apache.http.HttpStatus; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.ObjectMapper; import com.mashape.unirest.http.Unirest; import com.mashape.unirest.http.exceptions.UnirestException; public class UnirestExample { public class Item { private String full4kurl; private String previewurl; private String description; @Override public String toString() { return "{full4kurl:" + full4kurl + ", previewurl:" + previewurl + ", description:" + description + "}"; } } public class Hit { private String id; private Item fields; @Override public String toString() { return "{id:" + id + ", fields:" + fields + "}"; } } public class Hits { private int found; private int start; private Hit[] hit; @Override public String toString() { return "{found:" + found + ", start:" + start + ", hit:" + Arrays.toString(hit) + "}"; } } public class CloudSearchResult { private Hits hits; @Override public String toString() { return "{hits:" + hits + "}"; } } public static final String END_POINT = "AWS CloudSearch URL"; static { Unirest.setTimeouts(1000, 5000); Unirest.setObjectMapper(new ObjectMapper() { private Gson gson = new GsonBuilder().disableHtmlEscaping() .create(); @Override public <T> T readValue(String value, Class<T> valueType) { return gson.fromJson(value, valueType); } @Override public String writeValue(Object value) { return gson.toJson(value); } }); } public static void main(String[] args) throws UnirestException { HttpResponse<CloudSearchResult> response = Unirest.post(END_POINT) .header("Header", "header").body("body") .asObject(CloudSearchResult.class); if (response.getStatus() == HttpStatus.SC_OK) { CloudSearchResult body = response.getBody(); System.out.println(body); } else { throw new RuntimeException("Fail to invoke URL "); } } }


Puede recuperar el cuerpo de JsonNode y luego convertir el JsonNode en JSONObject para acceder a los valores. Para acceder a los resultados, puedes convertirlo a JSONArray.

import org.json.*; HttpResponse<JsonNode> request = Unirest.get(URL).header("X-Mashape Authorization", MASHAPE_AUTH).asJson(); JSONObject responsejson = request.getBody().getObject(); JSONArray results = responsejson.getJSONArray("results");

Luego puedes iterar sobre cada JSONObject en los resultados. Por ejemplo para obtener el primer objeto en los resultados.

JSONObject value = results.getJSONObject(0);


// try this way,hope this will help you... String respone = "{/n" + " /"success/": /"1/",/n" + " /"error_number/": /"/",/n" + " /"error_message/": /"/",/n" + " /"results/": [/n" + " {/n" + " /"name/": /"name1/",/n" + " /"formatedName/": /"Name 1/"/n" + " },/n" + " {/n" + " /"name/": /"testtesttest/",/n" + " /"formatedName/": /"Test Test Test/"/n" + " },/n" + " {/n" + " /"name/": /"nametest2/",/n" + " /"formatedName/": /"Name Test 2/"/n" + " },/n" + " {/n" + " /"name/": /"nametest3/",/n" + " /"formatedName/": /"Name Test 3/"/n" + " }/n" + " ]/n" + "}"; try{ JSONObject responeJson = new JSONObject(respone); if(responeJson.getString("success").equals("1")){ JSONArray jsonArray = responeJson.getJSONArray("results"); for (int i=0;i<jsonArray.length();i++){ System.out.println("Name : "+jsonArray.getJSONObject(i).getString("name")); System.out.println("FormatedName : "+jsonArray.getJSONObject(i).getString("formatedName")); } }else{ Toast.makeText(this,responeJson.getString("error_message"),Toast.LENGTH_SHORT).show(); } }catch (Throwable e){ e.printStackTrace(); }