Pankaj Kumar Katiyar
Pankaj Kumar Katiyar

Reputation: 1494

How to append key - values in json object using java

I am using org.json.JSONObject package to create a JSONArray by filling up values from db, I can get the values from db and put them a key - pair in json, but at the end of the program: key and values are not appended whereas only the last row of array is converted into json object. I want them to be appended in the final json. Any help will be appreciated.

  try {
    MobileTestClass_Methods.InitializeConfiguration();
    String sqlQuery = "SELECT id, NAME FROM campaign LIMIT 4; ";
    Connection con = MobileTestClass_Methods.CreateSQLConnection();

    String [][] arr = MobileTestClass_Methods
        .ExecuteMySQLQueryReturnsArrayWithColumnName(con, sqlQuery);
    JSONObject json = new JSONObject();
    int totalrow =arr.length;
    int totalcolumn =arr[0].length;

    System.out.println("row: "+totalrow + " col: "+totalcolumn);

    for(int i=1; i<totalrow; i++) {
        for(int j=0; j<totalcolumn; j++) {
            String key = arr[0][j];
            String value = arr[i][j];
            json.put(key, value);
            System.out.println("Key: "+key + "  value: "+value);
        }
    }

    System.out.println("Json: "+json);

    JSONArray array = new JSONArray();
    array.put(json);

    JSONObject main = new JSONObject();
    main.put("result", array);

    System.out.println("Final Json Array: "+main);
  } catch(Exception e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
  }

Output:

  row: 5 col: 2
  Key: id  value: 25256
  Key: NAME  value: megha_video
  Key: id  value: 32168
  Key: NAME  value: Mukesh_13Aug_vpaid
  Key: id  value: 25258
  Key: NAME  value: vast
  Key: id  value: 32167
  Key: NAME  value: SDK-rtb-hudson-130815
  Json: {"id":"32167","NAME":"SDK-rtb-hudson-130815"}
  Final Json Array: {"result":[{"id":"32167","NAME":"SDK-rtb-hudson-130815"}]}

Upvotes: 1

Views: 46002

Answers (2)

Pankaj Kumar Katiyar
Pankaj Kumar Katiyar

Reputation: 1494

Well, I needed to create a json array before starting the loop and then store the json object in the first loop and finally add this json object to json array.

String [][] arr = MobileTestClass_Methods.ExecuteMySQLQueryReturnsArrayWithColumnName(con, sqlQuery);
            JSONObject json = new JSONObject();
            int totalrow =arr.length;
            int totalcolumn =arr[0].length;

            System.out.println("row: "+totalrow + " col: "+totalcolumn);

            JSONArray array = new JSONArray();

            for(int i=1; i<totalrow; i++)
            {
                JSONObject row = new JSONObject();

                for(int j=0; j<totalcolumn; j++)
                {
                    String key = arr[0][j];
                    String value = arr[i][j];
                    row.put(key, value);
                    System.out.println("Key: "+key + "  value: "+value);
                }
                array.put(row);
            }

Upvotes: 1

Farrandu
Farrandu

Reputation: 371

The result of your query returns always the keys id and NAME, so you're overwriting the values continuously.

If you want to have multiple objects with id and NAME properties you should use a JSONArray and create nested JSONObjects inside:

// ... previous code

String [][] arr = MobileTestClass_Methods.ExecuteMySQLQueryReturnsArrayWithColumnName(con, sqlQuery);
JSONArray json = new JSONArray ();
int totalrow =arr.length;
int totalcolumn =arr[0].length;

System.out.println("row: "+totalrow + " col: "+totalcolumn);

for(int i=1; i<totalrow; i++)
{
    JSONObject row = new JSONObject();
    for(int j=0; j<totalcolumn; j++)
    {
        String key = arr[0][j];
        String value = arr[i][j];
        row.put(key, value);
        System.out.println("Key: "+key + "  value: "+value);
    }
    json.put(row);
}

// ... rest of the code ...

Upvotes: 3

Related Questions