Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

creating json string using JSONObject and JSONArray

Tags:

java

json

jquery

I have data like this:

NewsItem :

  • id
  • title
  • date
  • txt

There may be many NewsItems say 10. I have to send them to jquery.

I am doing this:

JSONObject obj = new JSONObject();
JSONArray arr = new JSONArray();

for(int i = 0 ; i< list.size() ; i++){
    p = list.get(i);
    arr.put(p.getId());
    arr.put(p.getTitle());
    arr.put(new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
    arr.put(getTrimmedText(p.getText()));
    obj.put(""+i,arr);
    arr = new JSONArray();
}

This will create a JSON string like this : {"1":["id","title","date","txt"],"2":[......and so on...

Is that correct way of doing this?

How can I parse this string so that I can get each news item object in jQuery so that I can access attr.

Like this:

obj.id,
obj.title

Or if this is wrong way of creating JSON string, please suggest some better way with example of parsing in jQuery.

like image 347
JAVAGeek Avatar asked Jul 20 '12 21:07

JAVAGeek


People also ask

Can we convert JSON object to string?

We can also convert JSON Object to JSON String by using the toJson() method.

How can we create correct JSONArray in Java using JSON object?

jsonObject. put("key", "value"); Create a JSON array by instantiating the JSONArray class and add, elements to the created array using the add() method of the JSONArray class.

How do I encode a JSON to a string?

Use the JavaScript function JSON.stringify() to convert it into a string. const myJSON = JSON.stringify(obj); The result will be a string following the JSON notation.


2 Answers

I believe that you're organizing your data backwards. It seems that you want to use an array of NewsItems, and if so, then your java JSON generation code should look like this:

JSONObject obj = new JSONObject();
JSONArray arr = new JSONArray();

for(int i = 0 ; i< list.size() ; i++)
{
    p = list.get(i);

    obj.put("id", p.getId());
    obj.put("title", p.getTitle());
    obj.put("date". new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
    obj.put("txt", getTrimmedText(p.getText()));

    arr.put(obj);

    obj = new JSONObject();
}

Now your JSON string will look something like this:

[{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"},
 {"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"},
 ...]

Assuming that your NewsItem gettors return Strings. The JSONObject method put is overloaded to take primitive types also, so if, e.g. your getId returns an int, then it will be added as a bare JSON int. I'll assume that JSONObject.put(String, Object) calls toString on the value, but I can't verify this.

Now in javascript, you can use such a string directly:

var arr =
    [{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"},
     {"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"}];

for (i = 0; i < arr.length; i++)
    alert(arr[i].title); // should show you an alert box with each first title
like image 55
pb2q Avatar answered Oct 21 '22 10:10

pb2q


The idea of the json object is the same as a dictionary/map where you have keys and values assigned to those keys, so what you want to construct would be something like this:

{"1": {"title": "my title", "date": "17-12-2011", "text": "HELLO!"}, "2": ....}

where the "1" is the id and the contents is another dictionary/map with the info.

lets say you assigned the object to a variable named my_map, now you will be able to handle it as:

 my_map.1.title
 my_map.3.text
 ...

to iterate over it just use:

for (info in my_map){
    data = my_map[info];
    //do what you need
}
like image 21
Hassek Avatar answered Oct 21 '22 11:10

Hassek