以正确的顺序从Web服务中迭代Json数据

我有来自Web服务的响应,数据是JSON格式。

 JSONObject event:- { "15:00":{"type":1,"status":null,"appointment_id":null}, "16:00":{"type":1,"status":null,"appointment_id":null}, "17:00":{"type":1,"status":null,"appointment_id":null}, "18:00":{"type":1,"status":"1","appointment_id":5} } 

我不知道关键值,它们是随机的。 因此,当我使用迭代器通过获取keyshasNext()来迭代数据时。 它返回数据但改变了即将到来的数据的顺序。

 Iterator AppoinmentIter = event.keys(); while(AppoinmentIter.hasNext()){ String appointmentTime = (String)AppoinmentIter.next(); JSONObject appointmentDetails = event.getJSONObject(appointmentTime); } 

我想要数据的确切顺序。 我查了这个链接 ,建议使用LinkedHashMap 。 但是在这里他们通过键插入值。 我不知道我的数据中的密钥。 那么我怎么能以正确的顺序迭代数据。 请帮忙..

Vikas,据我了解你的问题我设法检索预期格式的json对象,希望这会对你有所帮助。 请享用!!

  String s = "{ \"15:00\":{\"type\":1,\"status\":null,\"appointment_id\":null},\"16:00\":{\"type\":1,\"status\":null,\"appointment_id\":null},\"17:00\":{\"type\":1,\"status\":null,\"appointment_id\":null},\"18:00\":{\"type\":1,\"status\":\"1\",\"appointment_id\":5}}"; try { JSONObject jobj = new JSONObject(s); Iterator iter = jobj.keys(); while(iter.hasNext()){ String appointmentTime = String.valueOf(iter.next()); aRRaY.add(appointmentTime); } Collections.sort(aRRaY); for(String key : aRRaY){ JSONObject appointmentDetails = jobj.getJSONObject(key); System.out.println(key +" ----- "+appointmentDetails); } } catch (JSONException e) { e.printStackTrace(); } 

这不是JSON的工作原理。 除非你有一个数组,否则它假定顺序无关紧要。 如果你想让顺序变得重要,你使用了错误的格式 – 你需要使用一组times-> values而不仅仅是times-> value。

对于您的特定应用程序,您可以获取一组键,然后使用自定义比较器对它们进行排序,该比较器使用解析的值作为订购它们的时间。 但是内置的库不会为你做,因为你没有使用JSON作为它的设计。

我不知道你做过的实现,以及你所涉及的3pp。 但无论如何,尝试下面的代码,你会得到你想要的。

 import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map.Entry; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class Test { private static final ObjectMapper mapper = new ObjectMapper(); public static void main(String[] args) { String json = "{" + "\"15:00\":{\"type\":1,\"status\":null,\"appointment_id\":null}, " + "\"16:00\":{\"type\":1,\"status\":null,\"appointment_id\":null}," + "\"17:00\":{\"type\":1,\"status\":null,\"appointment_id\":null}," + "\"18:00\":{\"type\":1,\"status\":\"1\",\"appointment_id\":5}" + "}"; LinkedHashMap> fromJSON = fromJSON( json, LinkedHashMap.class); for (Entry> entry : fromJSON .entrySet()) { System.out.print(entry.getKey()); System.out .println(" || status = " + entry.getValue().get("status")); } } public static  T fromJSON(String input, Class clazz) { try { return mapper.readValue(input != null ? input : "null", clazz); } catch (JsonParseException e) { throw new RuntimeException(e); } catch (JsonMappingException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } }