Как получить значение от Json Object…?

1

Как вы получаете значение от объекта json, если тип JsonArray - "Личный"? Я хотел бы, чтобы пара значений имени знака называлась так:

String s = "February" ;
int i = 3;

Я был бы очень признателен за некоторые советы о том, как продвигаться дальше.

Заранее спасибо, Sankar

String monthArray[] = { "January", "February", "March", "April", "May",
            "June", "July", "August", "September", "October", "November",
            "December" };

    System.out.println("Size of month array:-->> " + monthArray.length);

    JSONObject jbj = new JSONObject();
    JSONObject jbj1 = new JSONObject();
    JSONObject jbj2 = new JSONObject();

    JSONObject general = new JSONObject();

    JSONArray jarray = new JSONArray();
    JSONArray jarray1 = new JSONArray();
    JSONArray jarray2 = new JSONArray();

    JSONObject finalGen = new JSONObject();

    jbj.put("February", 3);
    jbj.put("March", 15);
    jbj.put("April", 6);
    jbj.put("July", 10);
    jbj.put("December", 5);

    jbj1.put("February", 3);
    jbj1.put("March", 14);
    jbj1.put("April", 23);
    jbj1.put("May", 6);

    jbj2.put("February", 33);
    jbj2.put("March", 12);
    jbj2.put("May", 4);
    jbj2.put("June", 7);

    jarray.add(jbj);
    jarray1.add(jbj1);
    jarray2.add(jbj2);

    general.put("Personal", jarray);
    general.put("Common", jarray1);
    general.put("Management", jarray2);
    finalGen.put("FinalResultSet", general);

    System.out.println("\n Personal Value :-->> " + finalGen.toString(3));

    JSONObject finalson = JSONObject.fromObject(finalGen
            .get("FinalResultSet"));
    JSONArray jarra = finalson.getJSONArray("Personal");

    for (int i = 0; i < jarra.size(); i++) {
        JSONObject jb = jarra.getJSONObject(i);

        for (int p = 0; p < monthArray.length; p++) {

            String s = monthArray[p];

            System.out.println("\n VALUE OF STR " + s);
            String t = jb.getString(s);

            System.out.println("\n  VALUE OF STR Json Str " + t);

        }
    }

    System.out.println("Personal String " + jarra);

}

Моя продукция: -

Size of month array:-->> 12

Personal Value :-->> {"FinalResultSet": {
    "Personal": [   {
      "February": 3,
      "March": 15,
      "April": 6,
      "July": 10,
      "December": 5
   }],
   "Common": [   {
      "February": 3,
      "March": 14,
      "April": 23,
      "May": 6
   }],
   "Management": [   {
      "February": 33,
      "March": 12,
      "May": 4,
      "June": 7
   }]
}}

VALUE OF STR January

Исключение: -

Exception in thread "main" net.sf.json.JSONException: JSONObject["January"] not found.
    at net.sf.json.JSONObject.getString(JSONObject.java:2177)
    at JFreechartDemo.XMLData.main(XMLData.java:68)
Теги:

2 ответа

1
Лучший ответ

Вы пытаетесь получить значение поля с ключом "Январь" внутри цикла for, но такого поля нет. Сначала вы должны поместить пару ключевых значений в свой объект JSON.

Взгляните на документацию JSONObject get method. Там есть что-то подобное:

Throws:
JSONException - if the key is not found.

Поскольку метод get генерирует исключение, если нет ключа, это не очень хорошая идея для итерации по всему массиву с месяцами и попытки угадать, находится ли конкретный месяц внутри JSON в качестве ключа. Вы можете сделать это, если вы хотите, но вы должны использовать has метод первым, чтобы проверить, если месяц действительно существует.

С другой стороны, вы можете получить все имена ключей из JSONObject, а затем вызвать метод get только для этих имен.

  • 0
    Если я поставлю ключ как значение января, то он будет отображаться как JSONObject ["February"] не найден. В любом случае я зацикливаю массив Месяц, оттуда, если какая-либо из пар ключ-значение соответствует, значит, он печатает пару ключ-значение, но в моих случаях у меня так много пары ключ-значение ... для этого условия, что делать ..?
  • 1
    поместите if (jb.has (s)) перед String t = jb.getString (s); т.е. проверьте, присутствует ли ключ в массиве.
Показать ещё 6 комментариев
0
private void doLogin(String userName, String password) {

    //http://obbg.in/api/login.php?action=login&username=tejal+patel+&password=ZGhhcmE5ODk4MjQ4Mzg3%0A

    byte[] data = new byte[0];
    try {
        data = password.getBytes("UTF-8");
        password = Base64.encodeToString(data, Base64.DEFAULT);
        Ion.with(this)
                .load("http://obbg.in/api/login.php")
                .setBodyParameter("action", "login")
                .setBodyParameter("username", URLEncoder.encode(userName, "utf-8"))
                .setBodyParameter("password", password)
                .asString()
                .setCallback(this);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}


@Override
public void onCompleted(Exception e, String result) {

    try {
        JSONObject jsonObject = new JSONObject(result);
        JSONArray username = jsonObject.optJSONArray("Result");



        etLoginPassword.setText("");
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
}
  • 0
    как я могу получить имя пользователя и пароль ???

Ещё вопросы

Сообщество Overcoder
Наверх
Меню