【问题标题】:Get first key and value from JSON object从 JSON 对象中获取第一个键和值
【发布时间】:2015-10-24 21:09:56
【问题描述】:

我从我的网络服务器返回了以下格式的 JSON:

{"success":false,"errors":{"username":["Invalid username","Username too short"],"password":["Invalid password"]}}

如何在 Java 中解析 JSON 以获取 第一个键该键的第一个值?所以在上述情况下,输出应该是:

username
Invalid username

我当前的代码如下所示:

String json =  new String(((TypedByteArray) retrofitError.getResponse().getBody()).getBytes());

try {
    JSONObject obj = new JSONObject(json);

    String success = obj.getString("success");
    JSONObject errors = obj.getJSONObject("errors");

    // TODO

} catch (JSONException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 您是说您不想要username 键和相关值吗?如果 json 以 password 前面的 username 返回,你会想要 password 键和值吗?
  • 是的,没错。与该键关联的第一个键和第一个值,无论顺序如何。
  • 这似乎是一种奇怪的情况,因为对象的属性本质上没有顺序。你说它来自你的网络服务器——你能控制这个 JSON 文件的格式吗?您能否将与errors 关联的值设为数组而不是对象?一旦它是一个数组,您就可以轻松地使用gson 来解析 JSON 并将第 0 个元素拉出数组。
  • 顺序无关紧要。我想要的只是对象中的第一个键以及与该键关联的第一个值。
  • 不幸的是,javascript 对象键 don't have an order。它们看起来像,因为其中一个是先打印出来的,但实际上就是先打印的那个。所以当你说你想要“对象中的第一个键”时,这是没有意义的。

标签: java android json android-activity retrofit


【解决方案1】:

也许这样的事情可以帮助你,我不完全确定我是否理解你的问题:

for (final Iterator<String> iter = errors.keys(); iter.hasNext();) {
    final String key = iter.next();

    try {
        final Object value = errors.get(key);
        final JSONArray error = (JSONArray) value;
        System.out.println(key);
        System.out.println(error.get(0).toString());

    } catch (final JSONException e) {
        // Something went wrong!
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
相关资源
最近更新 更多