我的方法有问题JSONObject sayJSONHello()。
JSONObject sayJSONHello()
@Path("/hello") public class SimplyHello { @GET @Produces(MediaType.APPLICATION_JSON) public JSONObject sayJSONHello() { JSONArray numbers = new JSONArray(); numbers.put(1); numbers.put(2); numbers.put(3); numbers.put(4); JSONObject result = new JSONObject(); try { result.put("numbers", numbers); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } }
在客户端,我想要一个int数组[1, 2, 3, 4]而不是JSON
int
[1, 2, 3, 4]
{"numbers":[1,2,3,4]}
我怎样才能做到这一点?
客户代码:
System.out.println(service.path("rest").path("hello") .accept(MediaType.APPLICATION_JSON).get(String.class));
我的方法返回JSONObject,但我想从中提取数字,以便使用这些数字进行计算(例如作为int[])。
JSONObject
int[]
我公开了作为JSONObject的功能。
String y = service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).get(String.class); JSONObject jobj = new JSONObject(y); int [] id = new int[50]; id = (int [] ) jobj.optJSONObject("numbers:");
然后我得到错误:无法从JSONObject转换为int []
2种其他方式
String y = service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).get(String.class); JSONArray obj = new JSONArray(y); int [] id = new int[50]; id = (int [] ) obj.optJSONArray(0);
这次我得到:无法从JSONArray转换为int [] …
反正还是行不通..
我从来没有用过这个,我也没有测试过,但看着你的代码和文档JSONObject,并JSONArray,这是我的建议。
JSONArray
// Receive JSON from server and parse it. String jsonString = service.path("rest").path("hello") .accept(MediaType.APPLICATION_JSON).get(String.class); JSONObject obj = new JSONObject(jsonString); // Retrieve number array from JSON object. JSONArray array = obj.optJSONArray("numbers"); // Deal with the case of a non-array value. if (array == null) { /*...*/ } // Create an int array to accomodate the numbers. int[] numbers = new int[array.length()]; // Extract numbers from JSON array. for (int i = 0; i < array.length(); ++i) { numbers[i] = array.optInt(i); }
这应该适合您的情况。在更严重的应用程序,你可能要检查如果值确实是整数,作为optInt回报0,当值不存在,或者不是一个整数。
optInt
0
获取与索引关联的可选int值。如果索引没有值,或者该值不是数字并且不能转换为数字,则返回零。