8

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.

1
  • 3
    downvoter : here is a comment area for you.... Commented Jul 20, 2012 at 21:21

4 Answers 4

22

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
Sign up to request clarification or add additional context in comments.

4 Comments

how can i traverse each object in a loop.... arr[0] .. arr[1] would be ok but if i don't know number of items then how can i access them ???
@JAVAGeek: javascript arrays have a length property, see edit
what library is used? javax.json?
@pb2q you might want to change arr.put(obj); to arr.add(obj); to avoid The method put(JSONObject) is undefined for the type JSONArray error.
1

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
}

Comments

0

For converting JSON object to JSON string use

JSON.stringify(json_object)

For reverse use:

JSON.parse(json_string)

3 Comments

If you're using json-simple you can use toJSONString() method
What library is this from?
@Vic It is available with javascript: w3schools.com/js/js_json_intro.asp
0

This is the correct way -

final JSONArray arr = new JSONArray();

for(int i = 0 ; i< list.size() ; i++) {
    final JSONObject obj = new JSONObject();
    p = list.get(i);
    obj.add("id", p.getId());
    obj.add("title", p.getTitle());
    obj.add("date", new MyDateFormatter().getStringFromDateDifference(p.getCreationDate()));
    obj.add("txt", getTrimmedText(p.getText()));
    arr.add(obj);
}

This will generate

[{"id": 1, "date": 222, "title": "abc", "txt": "some text"}, {...}]

Now, when you parse the json at client end, you can iterate over the array and for each json object you can access as -

obj.id or obj["id"]

3 Comments

it is not obj.add("","");, it is obj.put("","");
list ? i have 2 string.
the 'obj' is not getting cleared up at the end of for loop. It requires, something like obj = new JSONObject(); in the end of every iteration in for loop

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.